Аргументы функции толкают порядок - PullRequest
9 голосов
/ 27 октября 2010

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

Ответы [ 2 ]

17 голосов
/ 27 октября 2010

Чтобы разрешить существование функций с переменным числом аргументов, например printf.Функция может извлечь первые один или два аргумента, а затем использовать их значения для определения общего количества аргументов в стеке.

8 голосов
/ 27 октября 2010

Единственная причина - переменные функции: первые аргументы, извлекаемые из стека, являются «известными» для функции, и по ним можно определить, сколько других аргументов следует прочитать из стека.

Обратите внимание, что для правильной работы в таких соглашениях о вызовах очистка стека предоставляется вызывающей стороне, которая знает, сколько аргументов она выдвинула в стеке.Это немного менее эффективно, чем callee-cleanup, потому что код очистки должен быть написан после каждого вызова функции, в то время как в соглашениях о вызовах, которые не допускают использование функций с переменным числом, он может быть встроен в конце каждой функции.

Кроме этого, нет особой причины, на самом деле существует несколько соглашений о вызовах (например, Pascal , Borland Fastcall ), которые не допускают функции с переменным числом аргументов и передают параметры слева направо.

...