1. ホーム
  2. c++

ヒープメモリの使用(malloc/new)は非決定論的なプログラムを作るか?

2023-08-25 03:41:43

質問

数ヶ月前から宇宙用のC言語でリアルタイムシステム用のソフトウェアを開発したり、C++でマイコン用のソフトウェアを開発したりしています。このようなシステムには経験則として ヒープオブジェクトを作るべきではない (だから malloc/new はダメ) という経験則があります。 非決定論的 . と言われても、その正しさを検証することはできませんでした。そこで これは正しい発言なのでしょうか?

私の知る限り、決定論とは、プログラムを 2 回実行すると、まったく同じ実行経路になることを意味します。私の理解では、同じプログラムを複数回実行すると、毎回異なるスレッドが異なる順序で実行される可能性があるため、これはマルチスレッド システムの問題です。

どのように解決するのですか?

リアルタイム システムのコンテキストでは、決定性には、繰り返し可能な実行パス以上のものがあります。 もう 1 つの必要な特性は、重要なイベントのタイミングが制限されることです。 ハード リアルタイム システムでは、許可された時間間隔の外側 (その間隔の開始前または終了後) に発生するイベントは、システム障害を表します。

このコンテキストでは、動的なメモリ割り当ての使用は、特にプログラムが割り当て、解放、および再割り当てのパターンを変化させる場合、非決定性を引き起こす可能性があります。 割り当て、解放、および再割り当てのタイミングは時間と共に変化するため、システム全体のタイミングは予測不可能になる可能性があります。