找到最大的空闲内存块

Rol*_*son 3 delphi memory-management

当碎片化时,有时会出现内存不足的问题.

是否有可能找到最大的可用内存块?我使用Delphi 2007和FastMM.在Windows 2003上运行应用程序的Windows XP上进行开发.

问候

编辑: 我可以在Windows Server 2003 x64上添加应用程序在具有32 GB内存的服务器上运行的信息.但该应用程序是一个32位应用程序,因此每个实例的理论最大分配内存为2 GB.许多实例立即运行.我认为总体物理记忆不是很少.我想在启动时应用程序获得了32位虚拟内存空间.这可能在运行时期间过于分散.

我还发现了FastGetHeapStatus方法,该方法返回一个THeapStatus,其中包含一些可用内存字段.也许我可以使用那些.

EDIT2: 我发现了这个如何获得最大的可用继续内存块.代码是C但也许可以翻译成Delphi.

Mar*_*ort 6

不,这是旧Turbo Pascal中的"maxavail",这是一个经常被要求的功能,但不幸的是,它在多用户,多任务环境中是一个无用的概念

heapmanager 可以知道它自己维护的内存中最大的块,但这通常很小,因为大块直接从(并返回)窗口分配.

逐步尝试分配更大块的方案将失败,因为操作系统将授予请求,即使这意味着为它交换磁盘(您不想要).尝试使用windows api调用挖掘此类值的技巧也是如此.

整个保护模式环境的基础是共享内存,每个应用程序只使用所需的内容.忽略这一点并假装一切仍然像在Dos之下只会产生大量投诉,这些人会立即运行多个应用程序.

如果您的应用程序确实依赖于此,请使用安全(小)默认值将其设置为配置设置(在启动时分配多少内存).如果真的很重要,请在安装过程中与用户对话

当然,通过执行一些winapi调用并假设没有其他应用程序运行,可以通过启发式尝试来播种默认值.但始终要与用户签订最终决定,特别是服务器应用程序.