为什么多线程吃我的记忆

问题描述:

我有一个Windows C++应用程序,它包含一个std::hash_set,其中包含500万条记录,每条记录有32个字节。如果我在单独的(很多)线程中创建hash_set,则根据ProcessExplorer使用> 1 GB。当我释放列表时,我看到了这一点。如果我在主线程中创建它,则使用200 MB。这种现象只适用于我的应用程序的32位版本。它不适合于x64版本。我使用Win XP x64的双核四核。 它不是内存泄漏。一切都清空()。为什么多线程吃我的记忆

我的猜测:Windows 32.Bit不是为许多线程/许多内核构建的。

你的gues是什么?

+3

只是可以想象,进程管理器是错误的。 – 2009-07-01 19:51:34

数据结构最终从堆中分配,不管线程如何,它都是相同的堆。从不同线程进行堆调用不会影响分配的内存量。无论是你的工具对你说谎,或者你在其他几个线程上偶然分配hash_set