函数参数推送顺序

为什么函数参数按从右到左的顺序压入堆栈?

使用可变数量的参数(如printf)启用函数的存在。 该函数可以提取前一个或两个参数,然后使用它们的值来推断堆栈上的参数总数。

唯一的原因是可变函数:从栈中弹出的第一个参数是函数的“已知”参数,它可以从它们确定它应该从栈中读取多少个其他参数。

请注意,为了使其工作正常,在这样的调用约定中,堆栈清理留给调用者,它知道它在堆栈上推送了多少个参数。 这比callee-cleanup效率稍差,因为清理代码必须在每次函数调用之后写入,而在调用不允许可变参数函数的约定时,它可以嵌入到每个函数的末尾。

除此之外,没有特别的理由,事实上有几个调用约定(例如Pascal , Borland Fastcall )不承认可变参数函数并从左到右推送参数。