メモリリークとは?
メモリリークとは、動的に確保した領域を解放し忘れ、使えるヒープが少しずつ減り続ける不具合。長時間連続運転が前提の組込み機器では、数日から数か月後に確保失敗として突然表面化するため、静的解析や長時間試験での検出が問われる。
エンベデッドシステムスペシャリスト試験の過去問では2回出題されています(2022年度〜2025年度)。
めもりりーく
メモリリークの意味
動的に確保した領域を解放し忘れ、使えるヒープが少しずつ減り続ける不具合。長時間連続運転が前提の組込み機器では、数日から数か月後に確保失敗として突然表面化するため、静的解析や長時間試験での検出が問われる。
メモリリークの具体例
通信エラー時の異常系だけ解放処理を通らない経路があり、1回あたり数百バイトの漏れが1日1万回発生して1週間で数メガバイトを失う。対策として、確保と解放を同じ層に閉じ込める、あるいは動的確保をやめて固定長のメモリプールへ置き換える。
メモリリークは試験でどう引っ掛けられる?
断片化と混同しやすい。断片化は解放済みなのに連続領域が取れない状態で、空き容量の合計は減らない。合計が減り続けるならリークで、原因も対策も別物である。
メモリリークと関連する用語
メモリリークが出た過去問
プログラム実行時の主記憶管理に関する記述として、適切なものはどれか。
正解:プログラムが使用しなくなったヒープ領域を回収して再度使用可能にすることを、ガーベジコレクションという。
要点:不要になったヒープを自動回収するのがガーベジコレクション
ガーベジコレクションは、ヒープ上に確保されたが既に参照されなくなった領域を実行時に自動的に検出して回収し、再利用可能にする仕組みである。プログラマによる明示的な解放漏れに起因するメモリリークを防げる一方、回収処理が不定期に走るため実時間性が要求される組込みシステムでは応答時間への影響に注意が必要である。
出典:令和4年度 秋期 エンベデッドシステムスペシャリスト試験 am2 問8(IPA)組込みシステムにおける、ソフトウェアのメモリ安全性(Memory Safety)を考慮した事例として、適切なものはどれか。
正解:バッファオーバーフロー、メモリリークなどの潜在的なセキュリティ上の問題を回避するために、メモリの保護機能を備えたプログラム言語を使用する。
要点:メモリ安全性は領域外アクセスを言語レベルで防ぐこと
メモリ安全性とは、確保した領域の外側への読み書きや、解放済み領域の参照などが起こらないことを指す。C言語のようにポインタ操作を制約しない言語ではこれらが容易に混入するため、境界検査や所有権による管理といったメモリ保護の仕組みを言語自体が備えたものを使うことが、根本的な対策になる。
出典:令和7年度 秋期 エンベデッドシステムスペシャリスト試験 am2 問17(IPA)
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。