-1

変数を宣言するだけで、プログラムメモリにその変数用のスペースが予約されますか?そうでない場合は、次のスニペットを検討してください。

void foo(int bar, int baz){
int a;
char b[4];
}

このコードは、fooに入るとすぐにスタックにスペースを割り当て、次のようなアクティベーションレコードを作成します。


| バズ|


| バー|


| 保存されたPC|


| a |


| b |

では、このアクティベーションレコードは、宣言されて定義されていない場合でも、aとbにどのようにスペースを割り当てるのでしょうか。

4

2 に答える 2

2

aおよびbは定義されていますが、使用されていません。プログラムはそれらが作成されたかどうかを判断できないため、コンパイラはそれらを自由に無視できます。

于 2012-10-06T19:12:23.687 に答える
1

必ずしもそうとは限りませんが、一部の最適化条件下では、コンパイラは初期化されていない変数が占めるスペースを破棄することを選択する場合があります。ただし、使用されていない変数をコードから削除することを常にお勧めします。

一般的な条件下で、32ビットシステムを想定すると、コンパイラは、将来使用される可能性のある変数のデータを保存するために、スタック内の最低4+4バイトのスペースを空にします。

于 2012-10-06T18:59:53.070 に答える