В чем смысл передачи аргументов функции справа налево?
изучая соглашения о вызовах функций (__stdcall, __cdecl) наткнулся на то, что аргументы функций передаются в стек справа налево. Почему аргументы передаются именно справа налево и никак иначе (за исключением __fastcall и __vectorcall). Есть этому явлению какое-либо объяснение?
Ответы (1 шт):
Порядок не имеет особого значения - ну выбрали, и выбрали, главное - придерживаться его для совместимости.
Однако для cdecl с varargs этот момент кажется существенным с точки зрения эффективности.
На вершине стека лежит самый первый (левый аргумент), далее второй и т.д. Таким образом, фиксированные аргументы находятся на известных в момент компиляции смещениях, обращаться к ним легко, быстро, безопасно. Да и для опциональных аргументов смещения тоже просто найти.
Иначе смещения бы приходилось высчитывать, исходя из общего числа аргументов в опциональной ... части