4

AC機能があれば

int foo(int input)
{
    int x = 5;
    if( input == 0 ){
        int y = 6;
    } else {
        int z = 7;
    }
}

関数に入るときにそのスタック ポインターが調整され、int xステートメント用のスペースができることはわかっています。そして、私はそれを知ってyおりz、それぞれのブロックの範囲内にのみ存在します. しかし、それらのためのスペースはいつ、どのように割り当てられるのでしょうか?

4

2 に答える 2

6

スペースが少なくとも変数の存続期間続く限り、それはコンパイラ次第です。

通常、関数内のすべての自動変数のスペースは、関数の開始時にスタックに割り当てられ、関数が戻るときに解放されます。一部の変数は、アドレスを持つ必要がない場合、レジスタに配置される場合があります。変数は使用されないため、おそらくまったく存在しません。

更新:コメントに記載されているように、C (まだ C++ ではない) では、動的にサイズ変更されたローカル配列が許可されます。明らかに、サイズがわかるまで、これらのスペースを割り当てることはできません。

于 2013-10-30T19:23:13.767 に答える