【发布时间】:2016-10-18 13:04:47
【问题描述】:
我们知道局部变量与 main 函数和所有其他函数都在堆栈内存中。当我打印 main 函数的地址、局部变量的地址和 malloc 的地址时,似乎局部变量更接近到malloc地址而不是主要功能地址。为什么? 代码:
int g;
int main(int argc, char** argv) {
int l;
printf("Adress of main fuction: %d\n", main);
printf("Adress of a global variable(g): %d\n", &g);
printf("Adress of a local variable(l): %d\n", &l);
printf("malloc: %d\n", malloc(10));
}
【问题讨论】:
-
为什么不应该更近一些?还是更进一步?编译器和操作系统可以随心所欲。
-
不要使用
%d打印地址——这就是%p的用途。 -
你能告诉我们这些地址吗?
-
C 的实现根本不需要有栈;事实上,“堆栈”这个词在 C99 的文本中根本没有出现。 (需要支持递归函数调用,但不需要堆栈。)
标签: c memory heap-memory stack-memory