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

C言語で関数にstaticを付けて定義したとき(例: static int helper(void))の効果として正しいものはどれか。

  1. Aその関数はプログラムの実行中、ずっとメモリに残らない
  2. Bその関数はファイルの中だけから見え、ほかのファイルに同じ名前の関数があっても衝突しない
  3. Cその関数は、ほかのどの関数よりも先に実行される
答えと解説を見る

正解:B. その関数はファイルの中だけから見え、ほかのファイルに同じ名前の関数があっても衝突しない

関数やグローバル変数にstaticを付けると内部リンケージになり、シンボルはそのファイルの中でだけ使われ、ほかのファイルからは参照できなくなります。名前の衝突を防げるだけでなく、コンパイラはその関数がほかから呼ばれないと分かるので、インライン展開や使われない関数の削除などの最適化もしやすくなります。

  • A. 関数のコードは実行中ずっとメモリにあります。
  • B. 正しい。内部リンケージになります。
  • C. 実行の順番は変わりません。
この分野を解く 分野ページへ

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

  1. C言語で「extern int count;」と書いたときの意味として正しいものはどれか。
  2. Linuxなどでよく使われるELF形式のファイルについて正しいものはどれか。
  3. 実行ファイルの.textセクションに入っているものはどれか。
  4. C言語でファイルの外側に「int limit = 100;」と書いたグローバル変数は、一般にどのセクションに置かれるか。
  5. .bssセクションの特徴として正しいものはどれか。