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