私は現在、64 KB の SRAM を搭載した ARM Cortex M3 プロセッサを使用して組み込みシステムを構築中です。現時点では、STL コンテナーで決定論的なパフォーマンスを確保する方法を探しています。これには、実行時にメモリ不足にならないようにすることも含まれます。
私は主に、STL コンテナーが動的メモリ割り当てを実行する方法に関心があります。カスタム アロケータを使用して、これらの構造体が確保したプールからメモリを取得することはできますが、構造体の 1 つのインスタンスが別のインスタンスのスペースを占有できないようにするために、構造体ごとに個別のプールをセットアップする必要があります。
私はこのプロジェクトで、メモリの未加工の割り当てに関心がなく、「よく知られている」データ構造 (スタック、キュー、デキューなど) を利用できることを好む他の個人と協力しています。したがって、私は現在、これらの構造を提供するために C 配列のラッパーを構築することを検討しています。これにより、これらのコンテナーをサポートするために必要なメモリーの静的割り当てが可能になり、他の開発者は、コンパイラーによって提供されるコードサイズ情報に基づいて、実行前にインスタンス化したコンテナーのサイズを知ることができます。私の意見では、これにより実行時にメモリ不足の問題が発生しないことが保証され、システム設計が大幅に簡素化されます。
もう 1 つのオプションは、システムの初期化時に STL コンテナーを割り当てることです。初期化期間の後、追加の動的メモリ割り当ては発生しません。ただし、私の知る限り、標準の C++ STL データ構造はこれをサポートしていません。スタックなどのコンテナーを事前に割り当てることができる必要があります (ベクターに似ています)。
標準 C 配列を中心にクラスを構築するという私の提案について、何かコメントをいただければ幸いです。さらに、静的サイズのスタックやキューなど、静的サイズの STL コンテナーをコンパイル時に割り当てる簡単な方法はありますか? (これはベクトルで可能であることは知っていますが、他のものはわかりません)
注: 別の質問 ( Embedded C++ to use STL or not ) を読みましたが、この質問の作成者は、メモリの量 (ARM7 プロセスの使用方法以外) を明らかにしていませんでした。私に似た解決策を検討しています。
2 番目の注意: 一部の開発者にとっては、64 KB の SRAM が大量のメモリに見えるかもしれません。実際、メモリが大幅に少ない AVR プロセッサで開発を行ったことがあるので、この観点は理解できます。しかし、私の現在の (おそらく無知な) 見方からすると、STL コンテナーについて話す場合、64 KB のメモリはそれほど多くはありません。