c - 带参数函数调用后的栈结构

标签 c memory-management

我只是在研究 C 中程序的内存分配。我知道所有的全局变量和静态变量都存储在堆中。此外,堆栈存储所有函数调用。不过,我确实有一个疑问。假设我正在调用以下函数:

int ret;
int num = 10;
int arr[3] = {1,2,3};
int *ptr = &arr[0];
ret = giveNumber(num, ptr);

在这里,我读到函数调用 giveNumer() 的参数也将存储在同一个堆栈中。但是它们将以什么顺序存储?如果我弹出堆栈顶部,哪个参数将首先弹出,numptr

最佳答案

我知道所有的全局和静态变量都存储在一个堆中
不,那不是真的。
根据标准,它们存储在实现定义的内存区域中,通常是数据段和 BSS。

如果我出栈顶,哪个参数先出栈,num or ptr
函数参数的求值顺序是未指定
所以这取决于你的编译器实现。编译器可能会评估以下参数:

  • 从左到右或
  • 从右到左或
  • 任何其他随机顺序

因此您看到的行为和顺序将取决于此。

关于c - 带参数函数调用后的栈结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10076891/

相关文章:

C++ 类模板未定义对函数的引用

objective-c - 有目的地创建保留循环(没有 GC 的 Objective-C )

c - 如何检索加载我的 dll 的线程的地址

android - 是否可以在 native C 中读取 logcat?

java - XX :MaxDirectMemorySize, Xmx,XX:JavaMemMax 之间的区别

c - 在 C 中,在函数中使用静态变量会使它更快吗?

使用分配的内存将整数复制到整数

iphone - iOS开发: How can I tighten up my Core Data memory usage?

c++ - 如何在 C 函数中使用 std::vector

c - snprintf() c 中的段错误