[英]C++ / Windows: HeapAlloc() for contention-free per-thread heaps
我有一个使用boost::thread
的多线程应用程序。 出于性能原因,我希望每个线程都有一个独立的堆。
我可以使用HeapCreate()
创建一个堆,但不清楚如何将其连接到CRT库,以便new
和malloc
在创建的堆上分配内存。 如何才能做到这一点?
如何才能做到这一点?
如果不完全替换整个内存分配器,就无法做到这一点。 例如,可伸缩内存管理器Hoard正是这样做的。 但是,替换内存分配器并不适合胆小者。
如果要在HeapCreate
使用每线程堆,并且分配/释放代码合理地包含在其中,则可以在线程代码中显式调用HeapAlloc
和HeapFree
。 但是,如果这和性能良好的标准CRT分配器一样快,我会感到惊讶。
您可以提供“新的全局运算符”,可用于检查您正在使用的线程并从适当的堆中返回内存。 当然,您还需要提供自己的“全局删除”。
当然,这仅会在实际使用new和delete的情况下“捕获” :-)
另一种方法:使用多个DLL,每个DLL的名称完全相同。 每个线程加载一个不同的DLL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.