好吧,这可能听起来很奇怪,但就是这样。
有 2 台计算机,A
(奔腾 D)和 B
(四核),运行 Windows XP 的 RAM 数量几乎相同。
如果我在两台计算机上运行相同的代码,A
中分配的私有(private)字节永远不会下降,从而导致以后的崩溃。在 B
中,私有(private)字节似乎不断被释放,一切看起来都很好。
在两台计算机中,工作集的释放和分配方式类似。
这可能是 list 或 DLL(系统)的问题吗?我一无所知。
此外,我在A
上编译了可执行文件并在B
上运行它,它成功了。
备注:
我用 Process Explorer 观察了使用的内存.
问题:
在执行期间(我们有多个分配和解除分配)私有(private)字节数远比工作集?
最佳答案
内存泄漏(增加私有(private)字节)对工作集没有影响这一事实不足为奇。工作集大小由应用程序最近接触的内存页数决定。专用字节是进程分配的内存量(不与其他进程共享)。如果应用程序忘记释放它不再使用的对象(内存泄漏),那么它的私有(private)字节不会下降,但工作集会下降,因为它没有主动使用该内存。参见 http://technet.microsoft.com/en-us/library/cc780836.aspx有关 Windows 可以为进程跟踪的资源统计信息类型的详细信息。
您可能需要查看应用程序在每台机器上加载的 DLL 的版本 - 可能需要在存在内存泄漏的机器上安装补丁或服务包来修复问题。 Process Explorer 还可以显示进程中加载的 DLL 的详细信息。
关于c++ - Private Bytes >> Working Set 是否正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3057136/