私たちは組み込みシステム環境で C++ を使用しており、基本的に動的なメモリ割り当ては必要としません (使用しない理由については、組み込みアプリケーションのメモリ管理に関するリソースなどを参照してください)。それでも、STL コンテナーや std::string などの優れた C++ ベースの機能をいくつか抜きにしてはなりません。最初のものでは、初期化時に特定のサイズを予約し、コンテナーがその容量を超えて大きくならないようにします。後者(std::string)の場合、ヒープにメモリを割り当てることがあるため、「安全に」使用する方法について少し懐疑的でした。
{}
ただし、std::string (および一般的に他のヒープ割り当てオブジェクト) を使用しても問題ないように見える状況を見つけました: オブジェクト自体をスタックに割り当てます (私が話しているように、によって区切られた特定のスコープ内で) C++ から) を使用し、スコープ外に出るときに予約済みメモリを実際にすべて解放することを条件に、ヒープを割り当てることができるようにします。
この方法がメモリの断片化の自由を確実に保証するものではないことは理解していますが、手元のスコープが短命である場合、これは実際にはスコープの終了後に連続した空きメモリになると感じています。
また、複数のタスクが同じヒープを共有しているが、手元のスコープがすべて短命である場合 (たとえば、ブロックしないでください)、最終的に空きメモリが連続している場合に問題が発生する可能性があるのではないかと疑っていました。あるいは、1 つのタスクのみがヒープにメモリを割り当てることを許可され、それが実際に重要な場合は他のタスクが許可されないことは、私には受け入れられます。
ヒープ割り当てオブジェクトの提案された使用法は有効ですか? メモリの断片化を危険にさらすことなく、動的メモリ割り当てを (部分的に) 有効にする別の戦略を誰かが持っていますか?