我只是在研究 C
中程序的内存分配。我知道所有的全局变量和静态变量都存储在堆中。此外,堆栈存储所有函数调用。不过,我确实有一个疑问。假设我正在调用以下函数:
int ret;
int num = 10;
int arr[3] = {1,2,3};
int *ptr = &arr[0];
ret = giveNumber(num, ptr);
在这里,我读到函数调用 giveNumer()
的参数也将存储在同一个堆栈中。但是它们将以什么顺序存储?如果我弹出堆栈顶部,哪个参数将首先弹出,num
或 ptr
?
最佳答案
我知道所有的全局和静态变量都存储在一个堆中。
不,那不是真的。
根据标准,它们存储在实现定义的内存区域中,通常是数据段和 BSS。
如果我出栈顶,哪个参数先出栈,num
or ptr
函数参数的求值顺序是未指定。
所以这取决于你的编译器实现。编译器可能会评估以下参数:
- 从左到右或
- 从右到左或
- 任何其他随机顺序
因此您看到的行为和顺序将取决于此。
关于c - 带参数函数调用后的栈结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10076891/