C ++ / Windows:HeapAlloc()用于无竞争的每线程堆

我有一个使用boost::thread的multithreading应用程序。 出于性能原因,我想每个线程都有一个独立的

我可以使用HeapCreate()创build一个堆,但是我不清楚如何将它连接到CRT库,以便newmalloc在创build的堆上分配内存。 如何才能做到这一点?

如何才能做到这一点?

没有完全替换整个内存分配器就无法完成。 例如可扩展内存管理器Hoard就是这样做的。 但是更换内存分配器并不适合那些胆小的人。

如果你想在HeapCreate使用per-thread堆,并且你的分配/解除分配代码是合理的,那么你可以直接在你的线程代码中直接调用HeapAllocHeapFree 。 但是,如果这个速度和标准的CRT分配器一样好,我会感到惊讶的。

不幸的是,没有安全和文件化的方法来取代CRT堆。 只有黑客。

对于new / delete语句,可以提供全局operator new()operator delete() ,它们将根据当前线程在所需堆中分配/解除分配内存。 线程本地存储(TLS)通常用于存储线程本地堆句柄。

对于malloc / free ,没有这样的文档替换方法。 大部分的黑客都在这里描述。

您可以提供一个“全局运算符new”,您可以使用它来检查您所在的线程,并从合适的堆中返回内存。 当然,您也需要提供自己的“全局删除”。

当然,这只会“捕捉”实际使用新的和删除的情况:-)

另一种方法:使用多个DLL,每个DLL除了名字都相同。 每个线程加载一个不同的DLL。