首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >堆栈内存布局的C语言

堆栈内存布局的C语言
EN

Stack Overflow用户
提问于 2014-10-10 15:47:59
回答 1查看 464关注 0票数 2

我尝试通过编译以下代码来验证我对C中堆栈内存布局的理解,并检查gdb中的地址。我只记录最低有效数字,较高的数字是相同的。输出是通过使用

代码语言:javascript
运行
复制
print \u &a 

下面是一个简单的测试代码:

代码语言:javascript
运行
复制
void test(int a,int b)
{
  int c = a;
  int d = b;
  printf("%d,%d\n",c,d);
}

int main()
{
  int x = 1;
  int y = 2;
  test(x,y);
  return 0;
}

如果我看一下测试函数框架,我会得到以下结果:

&b: 6808 &a: 6812

&c: 6824 &d: 6828

$rbp: 6832 (帧指针)。

我很困惑。函数参数不应该位于相对于局部变量更高的内存地址。有没有人能详细解释一下?谢谢。

编辑:如果我打印内存,如下所示:

代码语言:javascript
运行
复制
  printf("&a:%p,&b:%p\n",(&a),(&b));
  printf("&c:%p,&d:%p\n",(&c),(&d));

我得到了

代码语言:javascript
运行
复制
  &a:0x7fff4737687c,&b:0x7fff47376878
  &c:0x7fff47376888,&d:0x7fff4737688c

它变成了b,a,c,d顺序。在a的末尾和c的开头有一个8字节的间隙。我猜它应该是回信地址?

EN

回答 1

Stack Overflow用户

发布于 2014-10-10 18:53:28

根据函数的流程,首先分配参数,然后分配内部参数。您的关注点是基于堆栈向上增长的假设(这是不必要的)。

请点击下面的链接了解更多信息:Does stack grow upward or downward?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26294376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档