我的Delphi6程序崩溃了,因为TotalUncomm的内存不断增加



我的delphi6程序崩溃了,因为在某个时候,总adddrspace(theapstatus)命中了2GB级别,它崩溃了。我已经能够增加4GB级别的限制(使用{$ setpeflags $ 20}),但这只会延迟最终的崩溃。

问题是 TotalUncomments 记忆由于某种原因而不断增加,而Total Comminted内存以及总分配内存的内存可以在可接受的水平(约550 MB)中很好地稳定。

我无法完全弄清楚为什么总记忆保持在增加,最终使TotalAdddrSpace达到2GB(现在:4GB)级别,并且程序崩溃。

在程序中,我使用了许多动态数组,我的长度我通过 setLength 命令进行简单调整而定期增加或定期减少。这种定期增加/减小动态阵列以这种方式有效地导致了总数内存的增加?

任何建议或见解都非常感谢。

同样,如果您知道某种一般机制以某种方式积极降低总记忆...

感谢所有帮助!

我的问题原来是堆积的碎片之一(或我对此的理解)。

我使用setLength在需要时始终以5个位置的步骤增加/减小动态阵列。考虑到每个数组元素的大小,这显然会导致操作系统保留比实际所需的更多的内存,这使堆变得无界,而堆积也没有界限。总addrspace。

我尝试了不同的步骤尺寸以查看影响。由于步骤更大,问题消失了。

我最强烈建议您运行包含Memcheck的特殊构建。这是检测应用程序中内存泄漏的非常好的工具。更现代的Delphi版本具有其中的一些内置(部分要归功于FastMem),但是自从第一个Delphi版本以来,它就已经存在,并且在版本上效果很好。

最新更新