何时分配块范围变量

Bos*_*ohn 4 c c++ stack scope

如果我有交流功能

int foo(int input)
{
    int x = 5;
    if( input == 0 ){
        int y = 6;
    } else {
        int z = 7;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道当我们进入函数时会调整堆栈指针,这会为int x语句腾出空间.而且我知道y并且z只存在于各自块的范围内.但是他们何时以及如何分配空间?

Mik*_*our 6

这取决于编译器,只要空间至少持续变量的生命周期.

通常,函数中所有自动变量的空间在函数开始时在堆栈上分配,并在函数返回时释放.如果某些变量不需要地址,则可以将它们放在寄存器中.您的变量可能根本不存在,因为它们从未被使用过.

更新:如评论中所述,C(但尚未C++)允许动态大小的本地数组.显然,在知道尺寸之前,不能分配这些空间.