В чем смысл передачи аргументов функции справа налево?

изучая соглашения о вызовах функций (__stdcall, __cdecl) наткнулся на то, что аргументы функций передаются в стек справа налево. Почему аргументы передаются именно справа налево и никак иначе (за исключением __fastcall и __vectorcall). Есть этому явлению какое-либо объяснение?


Ответы (1 шт):

Автор решения: MBo

Порядок не имеет особого значения - ну выбрали, и выбрали, главное - придерживаться его для совместимости.

Однако для cdecl с varargs этот момент кажется существенным с точки зрения эффективности.

На вершине стека лежит самый первый (левый аргумент), далее второй и т.д. Таким образом, фиксированные аргументы находятся на известных в момент компиляции смещениях, обращаться к ним легко, быстро, безопасно. Да и для опциональных аргументов смещения тоже просто найти.

Иначе смещения бы приходилось высчитывать, исходя из общего числа аргументов в опциональной ... части

→ Ссылка