【发布时间】:2010-02-15 10:40:38
【问题描述】:
有时会出现碎片化时内存不足的问题。
是否有可能找到最大的空闲内存块? 我将 Delphi 2007 与 FastMM 一起使用。在 Windows XP 上开发,在 Windows 2003 上运行应用程序。
问候
编辑: 我可以添加应用程序在 Windows Server 2003 x64 上具有 32 GB 内存的服务器上运行的信息。但该应用程序是 32 位应用程序,因此理论上每个实例的最大分配内存为 2 GB。许多实例同时运行。我不认为是总的物理内存太少了。我猜当应用程序启动时有一个 32 位的虚拟内存空间。这可能会在运行时过于分散。
我还发现了 FastGetHeapStatus 方法,它返回一个 THeapStatus,其中包含一些用于释放内存的字段。也许我可以使用这些。
EDIT2: 我找到了这个How to get the largest available continues memory block。 代码是 C 但也许可以翻译成 Delphi。
【问题讨论】:
-
小修正:在 64 位操作系统版本上,您可以获得 32 位进程的完整 4 GB 地址范围。该进程可能无法使用它(由于内存管理例程中使用了带符号的数据类型),但该限制与 32 位操作系统不同。 AFAIR Delphi 确实有问题。
-
是的,delphi 在 RTL 中到处使用大量有符号值