c++ - Private Bytes >> Working Set 是否正常?

标签 c++ windows visual-c++ memory-management

好吧,这可能听起来很奇怪,但就是这样。

有 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/

相关文章:

c++ - 如何强制 MSVC 链接未使用的静态库(相当于 GCCs --whole-archive 参数)

c++ - vector<>::maxsize() 的最大大小是多少?

c++ - 使用多个参数值调用模板函数

c++ - 提升 Python 和 shared_ptr 的 vector

c++ - fork 进程每次都会打印不同的内容

c++ - "no diagnostic required"的基本原理是什么?

java - jdbc 资源部署后未出现在 JDBC Resources 节点

c++ - vector 之间的转换是否定义了行为?

c - 使用 C 关闭系统不起作用

windows - 如何获取窗框的颜色?