如果我有这样的代码:
int e;
int* f;
int main() {
int a, b, c;
int* d;
}
Run Code Online (Sandbox Code Playgroud)
在内存中存储这些变量的位置?而且,定义全局变量的问题是什么(在函数中,如本例中的main)?
实际上并没有保证在内存中放置变量,只保证行为.
但是,在大多数(或许是全部)实际系统中,e并且f将在全局数据段,同时a,b,c,d在寄存器中的混合和调用堆栈上.双方f并d可以指向任何地方在内存中(当然,有MMU这不正是如此,他们可以在任何地方,其中被映射到进程的内存子集点).
a,b,c和d将存在于堆栈中.如果要创建一个int实例(使用malloc或new),那么它将在堆上运行 - 但是名为"d"的指针仍然存在于堆栈中.
e和f在应用程序的内存空间中分配空间,即所谓的"数据段" - 请参阅:
您还询问了堆栈大小:由编译器配置,请参见此处:
http://msdn.microsoft.com/en-us/library/tdkhxaks(VS.71).aspx