代码之家  ›  专栏  ›  技术社区  ›  Jacob

专用字节>>工作设置是否正常?

  •  2
  • Jacob  · 技术社区  · 14 年前

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

    有两台电脑, A (奔腾D)和 B (四核)运行WindowsXP的RAM数量几乎相同。

    如果我运行 同码 在两台计算机上,分配的专用字节 以后再也不会发生撞车事故。在 看起来私有字节经常被释放,一切看起来都很好。

    二者都 在计算机上,工作集的释放和分配是类似的。

    这可能是清单或DLL(系统)的问题吗?我是 无线索的 .

    阿尔索 ,我在上编译了可执行文件 并运行它 它奏效了。

    注:

    我用 Process Explorer .

    问题:

    在执行期间(我们有几个分配 释放)私有字节的数量是否正常 许多的 比工作集大(1.5 GB对70 MB)?

    4 回复  |  直到 14 年前
        1
  •  4
  •   Michael Burr    14 年前

    内存泄漏(增加专用字节)不会对工作集产生影响,这一事实并不奇怪。工作集大小由应用程序最近接触的内存页数决定。private bytes是进程分配的内存量(而不是与其他进程共享)。如果一个应用程序忘记释放它不再使用的对象(内存泄漏),那么它的私有字节将不会下降,但工作集将下降,因为它没有主动使用该内存。见 http://technet.microsoft.com/en-us/library/cc780836.aspx 有关Windows可以跟踪进程的资源的统计信息类型的详细信息。

    您可能需要查看每台计算机上应用程序加载的DLL版本-可能需要在存在内存泄漏的计算机上安装修补程序或服务包来解决问题。进程资源管理器还可以显示进程中加载的DLL的详细信息。

        2
  •  4
  •   Patrick    14 年前

    虚拟地址空间、专用字节和工作集是应用程序的3个完全不同的方面。

    • private bytes是应用程序当前使用的内存。
    • 工作集是内存中当前加载到RAM中的部分。其余部分在页面文件中交换出去。
    • 虚拟地址空间是应用程序使用过的最高内存地址。碎片可能导致虚拟地址空间比专用字节大得多。

    认为专用字节的限制为2GB(对于非大型地址信息软件32位应用程序)是一种典型的误解。2GB实际上是虚拟地址空间的限制。碎片导致专用字节的限制减小。这在多大程度上取决于应用程序。在我的应用程序中,我在1.7-1.8GB左右开始出现问题。

    http://shsc.info/WindowsMemoryManagement 更详细的解释。

    现在这仍然不能解释两台计算机之间的区别。很难知道造成这种差异的真正原因是什么,但这可能有助于了解它们不同的“方面”,我首先看到的是处理器/核心的数量。 您的应用程序是否使用多线程?您的线程之间是否存在仅在四核系统上弹出的同步问题?

        3
  •  0
  •   Mark Wilkins    14 年前

    这可能是碎片的不同。例如,可以使用 small block heap 另一个可能不会。小块堆可以帮助处理由于小分配而导致的碎片。

        4
  •  0
  •   Community uzul    7 年前

    内存泄漏可能是不可预测的,很难确定。由于您在计算机上有一个带有内存泄漏的IDE,并且您能够调试内存在增加的进程,所以对于坏进程的传统调试方法将是我唯一的建议。你不能用Valgrind,因为你不在*nix上,但也许你应该看看 Is there a good Valgrind substitute for Windows? .