2012-04-09 63 views
1

我只是在研究C中的程序的内存分配问题。我知道所有的全局变量和静态变量都存储在一个堆中。而且,堆栈存储所有的函数调用。不过,我确实有一个疑问。说我打电话以下功能:带参数调用函数后的栈结构

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

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

+0

取决于你的架构并没有任何与你的调试器。 – Mat 2012-04-09 17:12:09

回答

3

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

如果我弹出栈的顶部,这参数将首先被弹出,numptr
的参数评价函数的顺序是未指定
所以它取决于你的编译器实现。

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

所以行为&为了你看,将取决于这样的:一个编译器可能会从评估论证。