[英]I don't understand something about stack
我读了一篇关于堆栈的文章。 但我不理解下面这句话: 由于堆栈增长,第一个参数将存储在最低地址(参数的这种反转历史上用于允许函数传递可变数量的参数)。
我的问题是:我认为即使参数没有反转存储,我们仍然可以允许传递可变数量的参数。 例如, sp = sp - 4
,然后我们push the first parameter's value onto the stack
,然后我们执行另一个sp = sp - 4
并push second parameter
,依此类推。
谢谢!
问题是:函数必须知道第一个参数的位置,而不是有多少个参数。
想象一下,你有
void fx(int, ...);
和
fx(2, -1, 42) /* 2 indicates 2 more arguments */;
fx(5, -1, 42, 2, 2, 2);
想象一下堆栈(在你想要的任何方向上增长)在通话之前有“XY”。
如果反向推动,则堆栈变为“XY 42 -1 2”或“XY 2 2 2 42 -1 5”,并且代码很容易获取第一个参数 : 堆栈顶部的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.