エンベデッドシステムスペシャリスト暗記無料で始める

動的メモリ確保の禁止とは?どうてきめもりかくほのきんし

動的メモリ確保の禁止とは、稼働中にヒープからの確保・解放を行わないという、組込み向けコーディング規約に置かれる制約。理由は二つあり、断片化によって総空きが足りていても確保に失敗しうること、そして確保時間がヒープの状態に左右されて最悪値を示せないこと。実時間性と信頼性を同時に守る手段として問われる。

最終更新:2026-10-06

試験情報

エンベデッドシステムスペシャリスト試験の頻出用語/午前II

エンベデッドSPを最短で暗記・合格する →

背景

長期間動き続ける機器では、確保と解放を繰り返すうちにヒープが虫食いになり、総空き容量は足りているのに連続領域が取れなくなる。しかもその失敗は何か月も動かして初めて出るので、試験工程で捕まえにくい。加えて確保時間がヒープの状態に依存するため、WCETの上界を示せなくなる。MISRA Cをはじめ各業界のコーディング規約が揃って制限を置くのはこのためである。

具体例

起動時に必要な領域をすべて静的配列か固定長のメモリプールとして確保し、以後は割り当てと返却だけを行う。通信バッファは最大同時接続数×最大長で固定し、足りなければ新規受付を断る。固定長なら断片化が起きず、確保に掛かる時間も定数として見積もれる。

試験での引っ掛け

起動時に一度だけ確保して解放しないなら、断片化も最悪時間も問題にならず規約でも許容されることが多い。禁止の理由は「動的だから危険」ではなく、実行中の確保失敗と時間の非決定性にある。C++では例外やSTLコンテナが裏で確保するため、書いていなくても混入する点も見落としやすい。

関連用語

解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。

エンベデッドSPを最短で暗記・合格する →

試験での特徴
  • 分野:午前II
  • 起動時に一度だけ確保して解放しないなら、断片化も最悪時間も問題にならず規約でも許容されることが多い。