这已经困扰我很长时间了:可以说我有一个功能:

void test(){
    int t1, t2, t3;
    int t4 = 0;
    int bigvar[10000];
    // do something
}

计算机如何处理变量的内存分配?

我一直认为变量空间保存在计算机随后将读取的.exe中,对吗?但是据我所知,由于未初始化,bigvar数组在.exe中不占用10000 int元素空间。那么,当我调用该函数时,其内存分配如何工作?

最佳答案

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

在Linux中编译时,您的代码最终在x86汇编器中看起来像这样:

test:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $40016, %esp
        movl    $0, -4(%ebp)
        leave
        ret

在上面,常量$ 40016是四个32位整数t1, t2, t3t4所需的空间,而其余的40000字节占10000个元素的数组bigvar

关于c++ - C++:函数变量声明,它在内部如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4429272/

10-11 15:35
查看更多