相关疑难解决方法(0)

我的32位应用程序可以做些什么来消耗千兆字节的物理RAM?

几个月前,一位同事提到我,我们的一个内部Delphi应用程序似乎占用了8 GB的RAM.我告诉他了:

那是不可能的

32位应用程序仅具有32位虚拟地址空间.即使存在内存泄漏,它可以消耗的内存最多也是2 GB.之后,分配将失败(因为虚拟地址空间中不会有空白空间).在内存泄漏的情况下,虚拟页面将被换出到页面文件,从而释放物理RAM.

但他指出Windows资源监视器表明系统上可用的RAM不到1 GB.虽然我们的应用程序仅使用220 MB的虚拟内存:关闭它可以释放8 GB的物理RAM.

所以我测试了它

我让应用程序运行了几个星期,今天我终于决定测试它.

首先,我在关闭应用程序之前查看内存使用情况:

  • 工作集(RAM)为241 MB
  • 使用的总虚拟内存:409 MB

在此输入图像描述

我使用资源监视器来检查应用程序使用的内存,以及正在使用的总RAM:

  • 应用程序分配的虚拟内存:252 MB
  • 使用中的物理内存:14 GB

在此输入图像描述

然后关闭应用程序后的内存使用情况:

  • 使用的物理内存:6.6 GB (低7.4 GB)

在此输入图像描述

我还使用Process Explorer来查看前后物理RAM使用情况的细分.唯一的区别是8 GB的RAM 确实是未提交的,现在是免费的:

| Item                          | Before     | After     |
|-------------------------------|------------|-----------|
| Commit Charge (K)             | 15,516,388 | 7,264,420 |
| Physical Memory Available (K) |  1,959,480 | 9,990,012 |
| Zeroed Paging List  (K)       |    539,212 | 8,556,340 |
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

注意:Windows有时会浪费时间将所有内存清零,而不是简单地将其放在备用列表中,并根据需要将其清零(因为需要满足内存请求).

这些都没有解释RAM正在做什么(你坐在那里什么!你包含什么!?)

那段记忆里有什么! …

windows delphi winapi delphi-5 virtual-memory

17
推荐指数
1
解决办法
948
查看次数

标签 统计

delphi ×1

delphi-5 ×1

virtual-memory ×1

winapi ×1

windows ×1