メモリリークとは

めもりりーく

malloc などで確保したメモリを、使い終わっても free で解放せず、その領域を指すポインタも失ってしまうことで、使えるメモリが減っていく不具合。エラーで途中から戻る道で解放を忘れる場合が多い。短いプログラムでは終了時にOSが回収するので目立たないが、長い間動き続けるサーバや組込み機器では、少しずつ空きが減って最後に確保に失敗する。Valgrind や AddressSanitizer(LeakSanitizer)などで検出できる。

「メモリリーク」は、2分野の2問の練習問題に出てきます(リンカ・ローダと実行形式, C言語の基礎など)。

この用語の分野: C言語の基礎

メモリリークの練習問題に挑戦

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

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

正解:B. ヒープ

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

解説の中の「メモリリーク」

「メモリリーク」が出てくる問題(2問)

  1. C言語のmallocで確保したメモリは、一般にプロセスのどの領域から取られるか。
  2. fill と use は別に定義された関数とする。上の関数の問題点として、正しいものはどれか。

C言語の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

動的メモリ確保 ヒープ システムコール アライメントとパディング 関数ポインタ 共用体 構造体 整数拡張 ダングリングポインタ バッファオーバーフロー

用語集の一覧へ