【发布时间】:2011-08-27 22:58:41
【问题描述】:
在 Windows 7.VS2008 上运行的 C++ 本机代码。
我的应用程序的特定状态更改将工作集(私有工作集)从 16Mb(6.5Mb) 增加到 38Mb(22Mb)。由于这似乎过度,我使用 umdh 检查了堆更改。我发现增加了 ~9Mb 之前和之后的堆之间的差异。
工作集中额外内存的原因是什么?
我怀疑它可能是 dll 加载,但我如何确认并分解它?
【问题讨论】:
-
Windows 以页为单位进行内存统计;即 38 MB 实际上是 9500 页。堆使用是否表示相同,即 2250 页?还是请求分配大小的总和?
-
它是请求分配大小的字节总和。 umdh 报告“总增加 == 5601391 请求 + 3685785 开销 = 9287176”
-
私有工作集是堆的大小加上栈的大小。你是否产生了任何额外的线程?
-
是的,应用程序中有多个线程。我知道每个线程都分配了一个 1 mb 的堆栈,但我认为实际上它是一个 4 kb 的堆栈,并带有允许它增长的标记,即生成一个新线程不会添加完整的 1 mb。
标签: c++ memory-management heap-memory working-set umdh