C++:函数变量声明,它在内部如何工作?

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个元素空间,因为它未初始化.那么当我调用函数时,它的内存分配如何工作?

unw*_*ind 9

这些局部变量通常使用处理器的堆栈来实现.这意味着编译器唯一需要做的就是计算每个变量的大小,并将它们加在一起.总和是在函数入口处更改堆栈指针的数量,并在退出时更改回来.然后访问每个变量,并将其相对偏移量放入堆栈中的该内存块.

在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, t3t4,而剩余的40000个字节占10000元件阵列bigvar.