我对堆栈一无所知

时间:2019-08-04 20:41:27

标签: c

我读了一篇有关栈的文章。但是我不明白下面的句子:由于堆栈变小,因此第一个参数将存储在最低地址(此参数的反转历来用于允许传递可变数量的参数)。

我的问题是:我认为即使没有反向存储参数,我们仍然可以允许传递可变数量的参数。例如,sp = sp - 4,然后我们push the first parameter's value onto the stack,然后再做另一个sp = sp - 4push second parameter,依此类推。

谢谢!

1 个答案:

答案 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”,并且代码很容易拾取第一个参数:位于堆栈顶部的东西。