リンカ・ローダと実行形式
C言語の関数の中で宣言した、staticの付かない局所変数(自動変数)は、実行中どこに置かれるか。
- A.dataセクション
- Bスタック(またはレジスタ)
- Cヒープ
答えと解説を見る
正解:B. スタック(またはレジスタ)
局所変数は、関数が呼ばれたときにスタックフレームの中に作られ(最適化でレジスタだけに置かれることもあります)、関数から戻ると消えます。そのため、再帰で同じ関数が何重に呼ばれても、それぞれが別の変数を持てます。実行ファイルの中に局所変数のためのセクションはなく、関数の先頭でスタックポインタを動かして領域を確保します。
- A. .dataはグローバル変数などの領域です。
- B. 正しい。関数が呼ばれるたびにスタックフレームに作られます。
- C. ヒープはmallocなどで確保する領域です。