我有一个Windows C ++应用程序,其中包含std::hash_set
,其中包含500个条目,每个条目包含32个字节。如果我在一个单独的(很多)线程中创建hash_set,它使用>根据ProcessExplorer 1 GB。当我释放清单时,我看到了这一点。如果我在主线程中创建它,它将使用200 MB。这种现象仅适用于我的应用程序的32位版本。它不适用于x64版本。我使用双四核与Win XP x64。
它不是内存泄漏。一切都在clear()上释放。
我的猜测:Windows 32.Bit不是为许多线程/多核构建的。
你有什么好处?
答案 0 :(得分:6)
数据结构最终从堆中分配,无论线程如何,它都是相同的堆。从不同的线程进行堆调用不会影响分配的内存量。你的工具对你说谎,或者你偶然在其他几个线程上分配hash_set
。