私はメモリプール上の実装&の概念についていくつかの明確化が必要です。 wikiにmemory poolことでメモリプールについての質問
、それは
も、固定サイズブロックの割り当てと呼ばれること...、 それらの実装があるため、可変 ブロック・サイズの断片化に苦しんでいるとして、それが不可能であると言いますパフォーマンスのためにリアルタイムシステム でそれらを使用してください。
"可変ブロックサイズによって断片化が発生する"とはどういう意味ですか?どのように固定サイズの割り当てがこれを解決することができますか?このwikiの説明は私に少し誤解を招くようです。私は断片化が固定サイズの割り当てによって回避されたり、可変サイズによって引き起こされたりしないと考えます。メモリプールコンテキストでは、特定のアプリケーション用に特別に設計されたメモリアロケータによってフラグメンテーションが回避されます。または、意図されたメモリブロックを使用して制限されます。
また、Code Sample 1とCode Sample 2などのいくつかの実装サンプルでは、メモリプールを使用すると思われます。開発者はデータ型をよく知っていて、データをリンクされたメモリに分割、分割、または整理する必要があります。チャンク(データがリンクされたリストに近い場合)または階層リンクチャンク(データがファイルのように整理された階層構造の場合)また、開発者は、必要なメモリ量を事前に予測する必要があるようです。
これは、プリミティブデータの配列に対してうまく機能すると思います。メモリモデルがそれほど明らかではないC++の非プリミティブデータクラスはどうでしょうか?原始的なデータであっても、開発者はデータ型の整列を考慮すべきでしょうか?
CおよびC++に適したメモリプールライブラリはありますか?
ありがとうございました!
基本的な考え方は、各オブジェクトが同じ空間を必要とするように、オブジェクトの各クラスごとに1つのプールがあることだと思います。これにより、解放されたブロックを正確に再利用できるため、メモリの割り当て、解放、再利用が容易に行えます。 –
こんにちは、Kerrek SB、ご意見ありがとうございます。 1つのクラス・タイプのプールが1つの場合、プールが多数存在するか、または1つのクラスが設計されるたびに1つのメモリー・プールが設計されます。これが正しければ、ちょっと面倒ですね。 – pepero
メモリプールの実装が、割り当てが許可されている項目の型によってテンプレート化されている場合は、コンパイラによって隠されて、必要な定型コードを大量に生成します。 – Chad