C++ でより高速なメモリ アロケータを使用しようとしています。ライセンス/コストの関係で Hoard を使用できません。シングルスレッド設定で NEDMalloc を使用していて、優れたパフォーマンスが得られましたが、別のものに切り替える必要があるかどうか疑問に思っています-私が理解しているように、NEDMalloc は C ベースの malloc() & free() C++ ベースの new & delete 演算子 (私が頻繁に使用する) ではありません。
問題は、スレッドセーフにする必要があるため、(過剰なコピーを防ぐために) 参照カウントされるオブジェクトを malloc しようとしていますが、このオブジェクトにはミューテックス ポインターも含まれています。そうすれば、最後のコピーを削除しようとしている場合は、まずポインターをロックしてからオブジェクトを解放し、最後にミューテックスをロック解除して解放する必要があります。
ただし、malloc を使用して boost::mutex を作成することは不可能に見えます。コンストラクターを直接呼び出すことは禁止されているため、プライベート オブジェクトを初期化できないからです。
そのため、この奇妙な状況が残っています。 new を使用してロックを割り当て、 nedmalloc を使用して他のすべてを割り当てています。しかし、大量のメモリを割り当てると、割り当てエラーが発生します (nedmalloc の代わりに malloc に切り替えると消えます ~ しかし、パフォーマンスはひどいです)。私の推測では、これはメモリ内の断片化と、nedmalloc と new がナイスを並べて配置できないことが原因であると考えられます。
より良い解決策が必要です。何を提案しますか?