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

C言語のmallocで確保したメモリは、一般にプロセスのどの領域から取られるか。

  1. A.textセクション
  2. Bヒープ
  3. C.rodataセクション
答えと解説を見る

正解:B. ヒープ

ヒープは、プログラムの実行中に必要な大きさのメモリを確保し、不要になったらfreeで返す領域です。確保する大きさや寿命を実行時に決められるのが特徴です。mallocは自分で空き領域を管理し、足りなくなるとOSに頼んで領域を広げます(Linuxではbrkやmmapのシステムコール)。freeし忘れると、使わないメモリが残り続けるメモリリークになります。

  • A. .textは機械語の領域で、書き込めません。
  • B. 正しい。実行中に必要な分だけ確保する領域です。
  • C. .rodataは書き込み禁止の定数の領域です。
この分野を解く 分野ページへ

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

  1. Linuxなどの一般的なプロセスのメモリ配置を、番地の小さい方から並べたものとして正しいものはどれか。
  2. プロセスのヒープとスタックを、間に広い空きをはさんで反対向きに伸ばす配置にする利点として正しいものはどれか。
  3. 静的リンクの説明として正しいものはどれか。
  4. 動的リンク(共有ライブラリ)の利点として正しいものはどれか。
  5. 動的リンクを使ったプログラムを別のコンピュータにコピーして実行したら、起動しなかった。最も考えられる原因はどれか。