请问一个Tstringlist内存分配问题
我在一个TIMER中每秒执行50次a.add('111');//a是一个Tstringlist
为啥程序在10分钟以后内存占用增加500kb以上,照道理应该没有这么多内存占用的,这是什么原因?怎样避免?还是就是应该增加这么多占用呢?
[解决办法]
delphi的内存释放不是把内存返回给系统,而是标记为可用,下次申请时继续使用,所以你会感觉申请的内存不断的增大
[解决办法]
一方面 Delphi的内存管理器不会立刻回收,而是有自己的调度规则.
另一方面,新的内存块未必就是你给他那么大,他有一个对齐方式.比如4KB对齐.你不停的分配,实际上会产生比较多的碎块.
还有内存管理器管理的时候每个内存块都会有一个描述信息.Delphi的默认是用链表管理的.大量的小块数据就会产生比较多的链表节点,每个节点再有一点描述信息.当然会大.VC一般是放在负偏移有一个描述块,结果是一样的.