gpt4 book ai didi

delphi - 查找最大的空闲内存块

转载 作者:行者123 更新时间:2023-12-03 15:39:40 25 4
gpt4 key购买 nike

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

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

问候

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

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

编辑2:我找到了这个How to get the largest available continues memory block 。代码是 C 语言,但也许可以翻译为 Delphi。

最佳答案

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

堆管理器可以知道它自己维护的内存中最大的 block ,但这通常很小,因为大块是直接从窗口分配(并返回到)的。

逐步尝试分配更大块的方案将会失败,因为操作系统将授予请求,即使这意味着交换到磁盘(您不希望这样做)。尝试通过 Windows API 调用挖掘此类值的技巧也是如此。

整个保护模式环境的基础是内存共享,每个应用程序仅使用所需的内存。忽略这一点并假装一切仍然像在 Dos 下一样只会引起同时运行多个应用程序的人们的大量提示。

如果您的应用程序确实依赖于此,请将其设置为具有安全(小)默认值的配置设置(启动时为某些内容分配多少内存)。如果它真的很重要,请在设置过程中让用户面对它

当然,人们总是可以通过执行一些 winapi 调用并假设没有其他应用程序运行来通过启发式尝试来播种默认值。但始终将最终决定权留给用户,特别是对于服务器应用程序。

关于delphi - 查找最大的空闲内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2265309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com