我读了一篇有关栈的文章。但是我不明白下面的句子:由于堆栈变小,因此第一个参数将存储在最低地址(此参数的反转历来用于允许传递可变数量的参数)。
我的问题是:我认为即使没有反向存储参数,我们仍然可以允许传递可变数量的参数。例如,sp = sp - 4
,然后我们push the first parameter's value onto the stack
,然后再做另一个sp = sp - 4
和push second parameter
,依此类推。
谢谢!
答案 0 :(得分:2)
问题是:函数必须知道第一个参数在哪里,而不是有多少个参数。
想象你有
void fx(int, ...);
和
fx(2, -1, 42) /* 2 indicates 2 more arguments */;
fx(5, -1, 42, 2, 2, 2);
想象一下,在调用之前,堆栈(向任意方向生长)具有“ X Y”。
如果反向推,则堆栈变为“ XY 42 -1 2”或“ XY 2 2 2 42 -1 5”,并且代码很容易拾取第一个参数:位于堆栈顶部的东西。