を使用するマルチスレッドアプリケーションがありますboost::thread
。パフォーマンス上の理由から、各スレッドに独立したヒープを持たせたいと思います。
を使用してヒープを作成できますが、HeapCreate()
これをCRTライブラリに接続して、作成されたヒープにメモリnew
をmalloc
割り当てる方法がわかりません。これはどのように行うことができますか?
を使用するマルチスレッドアプリケーションがありますboost::thread
。パフォーマンス上の理由から、各スレッドに独立したヒープを持たせたいと思います。
を使用してヒープを作成できますが、HeapCreate()
これをCRTライブラリに接続して、作成されたヒープにメモリnew
をmalloc
割り当てる方法がわかりません。これはどのように行うことができますか?
これはどのように行うことができますか?
メモリアロケータ全体を完全に交換せずに行うことはできません。たとえば、スケーラブルメモリマネージャのHoardはまさにそれを実行します。しかし、メモリアロケータを交換することは気弱な人のためではありません。
でスレッドごとのヒープを使用する必要がHeapCreate
あり、割り当て/割り当て解除コードが適切に含まれている場合は、スレッドコードHeapAlloc
をHeapFree
明示的に呼び出すだけで済みます。ただし、これが標準のCRTアロケータと同じくらい高速で、パフォーマンスが優れているとしたら、私は驚きます。
「グローバル演算子new」を提供できます。これを使用して、現在のスレッドを確認し、適切なヒープからメモリを返すことができます。もちろん、独自の「グローバル削除」も提供する必要があります。
もちろん、これはnewとdeleteが実際に使用される「キャッチ」ケースのみになります:-)
残念ながら、CRTヒープを置き換えるための安全で文書化された方法はありません。ハックのみ。
new
/ステートメントの場合、グローバルをdelete
提供できます。これにより、現在のスレッドに応じて、必要なヒープにメモリが割り当て/割り当て解除されます。スレッドローカルストレージ(TLS)は通常、スレッドローカルヒープハンドルを格納するために使用されます。operator new()
operator delete()
malloc
/の場合、そのfree
ような文書化された置き換え方法はありません。ここでは、ほとんどのハックについて説明します。
別のアプローチ:名前以外はすべて同一の複数のDLLを使用します。スレッドごとに異なるDLLをロードします。