組み込みソフトウェアは動的メモリと非常に相性が悪いです。一方で、今日では常識となりつつある設計やプログラミングの技法の多くは、動的メモリの使用を前提としています。このギャップは、意識しなければいけないところです。あなたが組み込みプログラマーなら、こういった技法は使わないか、動的メモリを避けるようにアレンジして使う必要があるかもしれません。使ってはいけない理由なぜそうまでして動的メモリを避けなければいけないのか。その理由をもう少し具体的に説明してみます。動的メモリはプログラマーが管理しなければならないものです。このことが、ちょっとしたミスでさまざまな実行時エラー(メモリリーク・メモリ不足・不正アクセスなど)を引き起こす原因となります。アプリなら、プログラムがクラッシュしても多少は我慢して使ってもらえるでしょう。時間とともに次第に動きが悪くなったとしても、再起動して直るならそれで済みます。組み込みソフトウェアにそのような不安定さは許されません。容量は、この現代においても、あきれるほど少ないものです。これは、製造原価や基板面積を切り詰めなければならないという組み込み製品の特性上、仕方のないことです。この限られた容量から、グローバル変数とスタックを差し引いた分が、動的メモリに使える容量ということになります。このように余裕のない中で動的メモリを使うのは、メモリ不足という名の地雷を好んで埋め込むようなものです。処理時間が予測しにくい組み込みソフトウェアは、プログラムの処理時間が短いことだけでなく、予測可能なこと(リアルタイム性)も同じぐらい重要視されます。終わる処理の方が好まれたりします。処理時間は予測がしづらく、このリアルタイム性を損ねる危険があります。デバッグしにくい製品が出荷された後でも、基板が筐体に収まった状態のまま、特定の不具合を調査しなければならないような局面があります。デバッガが使えません。このような場合、プログラム自身にメモリをダンプさせ、内部の変数やオブジェクトの状態を探るという手段がよく使われます。このとき、静的メモリにのみ依存したプログラムであればマップファイルが文字通り地図になってくれますが、動的メモリに依存すると、このようなデバッグが難しくなります。まとめ近代的なプログラミングの技法の多くは、動的メモリが支えています。私もプログラムを書いていて、「ここで動的メモリが使えれば」と思うことはよくあります。動的メモリさえ使わなければ、ここに挙げたリスクが発現する可能性はゼロです。組み込みソフトウェアにとって、そのことで得られる安心感には計り知れない価値があるのです。コメントをキャンセルメールアドレスが公開されることはありません。date*日本語が含まれない投稿は無視されますのでご注意ください。