を使用するマルチスレッドアプリケーションがあります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をロードします。