首页 > 解决方案 > 堆栈的大概地址是多少?

问题描述

最近在学习堆栈,为了学习,我用C语言写了一个简单的编程示例。我尝试调试。显然,栈中存储了局部变量或参数等数据,从高地址到低地址累加,但是当我打印出局部变量num1的地址时,出现了一个似乎是代码区{0x00bef6fc}的地址值。局部变量是存放在栈中的,所以我认为局部变量的地址应该是栈的位置,也就是高地址。我想错了吗?如果我做错了什么,你能指导我吗?

标签: cstack

解决方案


这个小程序打印了一个局部变量的地址和一个参数的地址。

#include <stdio.h>

int bar(int parameter)
{
  int foo = 0;
  printf("Address of foo:       %p\n", (void*)&foo);
  printf("Address of parameter: %p\n", (void*)&parameter);
}

int main()
{
  bar(42);
}

在大多数平台上,函数参数和局部变量都存储在堆栈中。所以上面程序打印的两个地址很可能会很接近,因此这也将是堆栈的大致地址。

OTOH,您无法以可移植的方式确定堆栈的起始地址和长度。

可能的输出:

Address of foo:       006FFCD4
Address of parameter: 006FFCE8

推荐阅读