New*_*bie 2 c++ windows stack visual-studio-2008
这一直困扰着我很长一段时间:让我说我有一个功能:
void test(){
int t1, t2, t3;
int t4 = 0;
int bigvar[10000];
// do something
}
Run Code Online (Sandbox Code Playgroud)
计算机如何处理变量的内存分配?
我一直认为变量空间保存在计算机将读取的.exe中,这是正确的吗?但据我所知,该bigvar
数组不会占用int
.exe中的10000个元素空间,因为它未初始化.那么当我调用函数时,它的内存分配如何工作?
这些局部变量通常使用处理器的堆栈来实现.这意味着编译器唯一需要做的就是计算每个变量的大小,并将它们加在一起.总和是在函数入口处更改堆栈指针的数量,并在退出时更改回来.然后访问每个变量,并将其相对偏移量放入堆栈中的该内存块.
在Linux中编译时,您的代码在x86汇编程序中看起来像这样:
test:
pushl %ebp
movl %esp, %ebp
subl $40016, %esp
movl $0, -4(%ebp)
leave
ret
Run Code Online (Sandbox Code Playgroud)
另外,在上述中,恒定$ 40016是所需的4个32位整数的空间t1, t2, t3
和t4
,而剩余的40000个字节占10000元件阵列bigvar
.