【发布时间】:2016-12-02 11:49:22
【问题描述】:
我的 Delphi6 程序崩溃了,因为 TotalAddrSpace (THeapStatus) 在某个时候达到了 2GB 级别,然后它就崩溃了。我已经能够将限制提高到 4GB 级别(使用 {$SetPEFlags $20}),但这只会延迟最终的崩溃。
问题是 TotalUncommitted 内存由于某种原因不断增加,而 TotalCommitted 内存和 TotalAllocated 内存很好地稳定在可接受的水平(大约 550 MB)。
我无法完全弄清楚为什么 TotalUncommitted 内存不断增加并最终使 TotalAddrSpace 达到 2GB(现在:4GB)级别并且程序崩溃。
在程序中,我使用了许多动态数组,我通过SetLength 命令进行简单的调整,定期增加或减少其长度。以这种方式定期增加/减少动态数组是否会有效地导致 TotalUncommitted 内存的增加超出界限?
非常感谢任何建议或见解。
另外,如果您知道一种以某种方式主动减少 TotalUncommitted 内存的通用机制...
【问题讨论】:
-
也许你受到heap fragmentation的约束?
-
发生这种情况的原因有很多。我们尝试将它们全部列出是不现实的。可能这个问题不合适 - 太宽泛了。
标签: delphi memory dynamic-arrays