リンカ・ローダと実行形式

C言語の関数の中で宣言した、staticの付かない局所変数(自動変数)は、実行中どこに置かれるか。

  1. A.dataセクション
  2. Bスタック(またはレジスタ)
  3. Cヒープ
答えと解説を見る

正解:B. スタック(またはレジスタ)

局所変数は、関数が呼ばれたときにスタックフレームの中に作られ(最適化でレジスタだけに置かれることもあります)、関数から戻ると消えます。そのため、再帰で同じ関数が何重に呼ばれても、それぞれが別の変数を持てます。実行ファイルの中に局所変数のためのセクションはなく、関数の先頭でスタックポインタを動かして領域を確保します。

  • A. .dataはグローバル変数などの領域です。
  • B. 正しい。関数が呼ばれるたびにスタックフレームに作られます。
  • C. ヒープはmallocなどで確保する領域です。
この分野を解く 分野ページへ

リンカ・ローダと実行形式のほかの問題

  1. C言語のmallocで確保したメモリは、一般にプロセスのどの領域から取られるか。
  2. Linuxなどの一般的なプロセスのメモリ配置を、番地の小さい方から並べたものとして正しいものはどれか。
  3. プロセスのヒープとスタックを、間に広い空きをはさんで反対向きに伸ばす配置にする利点として正しいものはどれか。
  4. 静的リンクの説明として正しいものはどれか。
  5. 動的リンク(共有ライブラリ)の利点として正しいものはどれか。