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