私は数か月前に宇宙アプリケーション用のリアルタイムシステムとC++用のマイクロコントローラのソフトウェアをC言語で開発し始めました。このようなシステムには経験則があります。ヒープオブジェクトは絶対に作成してはいけない(つまりmalloc/newは不要)プログラムが非決定論的。私は、人々が私にそう言ったときに、この発言の正しさを確かめることができませんでした。これは正しい記述でしょうか?
私が混乱しているのは、私が知る限り、決定論とは、プログラムを 2 回実行すると、まったく同じ実行パスになることを意味するということです。私の理解では、これはマルチスレッド システムの問題です。同じプログラムを複数回実行すると、毎回異なるスレッドが異なる順序で実行される可能性があるからです。
ベストアンサー1
リアルタイム システムのコンテキストでは、繰り返し可能な「実行パス」以上の決定論が存在します。もう 1 つの必須プロパティは、主要なイベントのタイミングが制限されていることです。ハード リアルタイム システムでは、許容される時間間隔外 (その間隔の開始前または終了後) に発生するイベントは、システム障害を表します。
このコンテキストでは、動的メモリ割り当てを使用すると、特にプログラムに割り当て、割り当て解除、再割り当てのさまざまなパターンがある場合に、非決定性が発生する可能性があります。割り当て、割り当て解除、再割り当てのタイミングは時間の経過とともに変化する可能性があるため、システム全体のタイミングが予測不可能になります。