有什么可以解释FastMM或GetProcessMemoryInfo报告的内存使用量的差异?

jon*_*bar 3 delphi memory-management fastmm delphi-xe

我的Delphi XE应用程序基于使用RemObjects创建的本地服务器DLL的单个EXE,并使用大量内存进行特定操作,直到它生成一个异常,说明内存不足.所以我试图理解为什么以及在哪里发生这种情况所以我在我的代码中放置了各种步骤来报告内存使用情况.问题是我根据获取内存使用信息的方法获得了非常不同的信息:

  1. 如果我使用这里解释的方法直接向FastMM请求客户端EXE和服务器DLL,这是我得到的:

    • 第1步:[client] = 36664572 - [server] = 3274976
    • 第2步:[client] = 62641230 - [server] = 44430224
    • 第3步:[client] = 66665630 - [server] = 44430224
  2. 现在如果我使用这里解释的使用GetProcessMemoryInfo 的方法,我得到更多的内存使用:

    • 第1步:[process] = 133722112
    • 第2步:[process] = 1072115712
    • 第3步:[process] = 1075818496

看起来第二种方法是基于我的记忆问题的权利,但FastMM方法怎么可能如此"低"?有什么可以解释这个区别?

Lar*_*ens 5

GetProcessMemoryInfo还报告不由FastMM管理的内存,例如由您可能调用的各种非Delphi dll(如winapi)分配的内存.

此外,FastMM可以从Windows分配更多内存,您的应用程序实际上将这些内存用于内部结构,碎片和池.

最后,使用GetProcessMemoryInfo测量工作集大小.这就是应用程序内存中的一部分,而不是在页面文件中的RAM中.它不仅包括数据结构,而且绝对不能与应用程序分配的总内存相比.PagefileUsage会更具可比性.工作集大小几乎从来都不是你想要的.请参阅此处以获得更好的解释.

所以他们都给出不同的结果,因为他们都衡量不同的东西.