組み込みシステムの Windows CE 4 で実行されるアプリケーションを開発するために c++ を使用しています。
制約の 1 つは、アプリケーションが使用するすべてのメモリが起動時にのみ割り当てられることです。新しいメモリを割り当てる代わりに、事前に割り当てられたメモリのみを使用する多くのコンテナとアルゴリズムを作成しました。
このような状況で、独自のコンテナの代わりにブースト ライブラリを使用することは可能だと思いますか?
コメントやアドバイスは大歓迎です!
どうもありがとう、
ニック
組み込みシステムの Windows CE 4 で実行されるアプリケーションを開発するために c++ を使用しています。
制約の 1 つは、アプリケーションが使用するすべてのメモリが起動時にのみ割り当てられることです。新しいメモリを割り当てる代わりに、事前に割り当てられたメモリのみを使用する多くのコンテナとアルゴリズムを作成しました。
このような状況で、独自のコンテナの代わりにブースト ライブラリを使用することは可能だと思いますか?
コメントやアドバイスは大歓迎です!
どうもありがとう、
ニック
組み込みシステムにはブーストを使用します。ブーストを使用すると、使用するものを選択して選択できます。すべてのプロジェクトでsmart_ptrandを使用 しています。安価な携帯電話用boost::bindのソフトウェアを作成しています。また、Windows CE がハードウェアで実行できる場合は、boost の一部が適用されると思います。割り当てのないブーストの部分があり、それらが役立つ場合があります。
私はあなたの要件に基づいて選択します。
使用するものと同様に、コストを知る必要があります。
固定サイズの静的バッファーから割り当てるコンテナー用の独自のアロケーターを作成できます。コンテナーの使用パターンに応じて、アロケーターはポインターをインクリメントするのと同じくらい簡単になります (たとえば、アプリの起動時にコンテナーに要素を 1 回だけ挿入し、要素を継続的に追加/削除しない場合)。
コンテナをBoostコンテナに置き換えることはお勧めできません。適切なカスタムアロケータを作成する作業はそれほど悪くはありませんが、「起動時に割り当てる」ルールの精神に違反することになります。このルールの背後にある考え方(私の経験では)は、通常、実行時にメモリ不足の状況に対処する必要がないことを確認することです。アイデアは、最初から必要になる可能性のあるすべてのメモリがあることを確認することです。これにより、システムのどの部分でも後でメモリが不足する可能性がなくなります。
カスタムアロケータでBoostコンテナを使用した場合、コンテナの割り当て元のプールが空になる可能性に突然対処する必要があります。これにより、「起動時に割り当てる」ルールの目的がなくなります。
メモリデバイスが限られている状況では、静的に割り当てられた配列よりも複雑なコンテナは避けます。
Boostはライブラリのセットです。それらのいくつかは、テンプレートメタプログラミングに焦点を当てています。それらは実行時にメモリを使用しません。しかし、あなたの質問はあなたのコンテナを交換することについてのようです。カスタムアロケータを使用しない限り、それが可能かどうかは疑問です。ただし、それでも、ブーストではなくプレーンSTLコンテナを使用している可能性があります。Boostは、TR1がまだ含まれていないコンパイラーに対して、TR1コンテナーのみを提供します。
ブーストを使用しないでください。
これは大きなライブラリであり、基本的なメモリ割り当ての要件は、ライブラリ設計者の要件とは大きく異なります。
カスタム アロケータを使用して現在のバージョンの Boost を要件に応じて動作させることができたとしても、Boost の新しいバージョンでは機能しなくなる可能性があります。
Boost のソース コードを自由に参照して、役立つアイデアを見つけてください。ただし、必要なものには独自の実装を使用してください。