繁体   English   中英

我对堆栈一无所知

[英]I don't understand something about stack

我读了一篇关于堆栈的文章。 但我不理解下面这句话: 由于堆栈增长,第一个参数将存储在最低地址(参数的这种反转历史上用于允许函数传递可变数量的参数)。

我的问题是:我认为即使参数没有反转存储,我们仍然可以允许传递可变数量的参数。 例如, sp = sp - 4 ,然后我们push the first parameter's value onto the stack ,然后我们执行另一个sp = sp - 4push 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM