delphi dispose释放内存的方法

2010-06-08 19:39:59|  分类: DELPHI |  标签: |举报 |字号大中小 订阅

 
 

dispose使用方法的简单介绍在本文末尾。

定义一个record 类型,经过多次new dispose后,从windows任务管理器看,占用的内存比启动时大了很多,似乎越来越大

设置 ReportMemoryLeaksOnShutdown := true; 再运行,仍然没有提示 memory leak。

其实就是dispose 本身的原因。

delphi设计的 dispose 释放内存时,只是标记这部分内存可以再用来被 new 等函数分配,并不是把从系统申请到的内存归还给操作系统,只在程序结束时,才全部释放给操作系统。

比如 new 申请 15 个记录(sizeof=64字节) 的空间,然后 dispose 释放。再使用 new 申请 10个,此时这 10 个就不再请求系统了,直接从刚才的 15个 (此时已经空闲) 中分10 个出来。只有在占用的空闲内存不够使用时,才请求操作系统分配内存(剩余部分)。

若前一次15个空间地址如左列,释放后,下一次10个空间的地址如右列,即从前次分配的最后一个地址开始,按前次的顺序,倒过来分配10个。

00F23860
00F23818
00F237D0
00F23788
00F23740
00F236F8
00F236B0
00F23668
00F23620
00F235D8
00F23590
00F23548
00F23500
00F234B8
00F23470
 
00F23470
00F234B8
00F23500
00F23548
00F23590
00F235D8
00F23620
00F23668
00F236B0
00F236F8

若不希望在运行期间占用内存越来越大,除了使用new / dispose 外,应该使用些什么呢,待续

 
 

简单介绍一下: 若有如下类型定义,可以使用new申请空间,并在使用完后使用dispose释放。

Type
 PMyRec = ^TMyRec;
 TMyRec = record
  FName: string;
  LName: string;
 end;

var
 MyRecPtr: PMyRec;
 TreeViewIndex: LongInt;
begin
 New(MyRecPtr);
 MyRecPtr^.FName := Edit1.Text;
 MyRecPtr^.LName := Edit2.Text;
 {其他处理}
 Dispose(MyRecPtr);
end;

http://blog.csdn.net/luo809976897/article/details/20134007

最新文章

  1. ML 基础知识
  2. LeetCode-Search in Rotated Sorted Array II
  3. Scalaz(17)- Monad:泛函状态类型-State Monad
  4. hihocoder #1333 : 平衡树·Splay2
  5. 使用POI实现数据导出Excel表格
  6. 今天弱爆了,svn创建项目
  7. 这些年,我收集的JavaScript代码
  8. Css3 Media Queries移动页面的样式和图片的适配问题(转)
  9. Keil c51现No Browse information available
  10. stdafx文件介绍
  11. [html5] 学习笔记-编辑 API 之 Range 对象(一)
  12. block之---应用场景:做参数和返回值
  13. java写文件读写操作(IO流,字节流)
  14. WebService--jax
  15. 单行json_ajax
  16. 【转】对GAMIT/GLOBK的基本认识
  17. JavaSE_坚持读源码_Class对象_Java1.7
  18. Git创建本地仓库并推送至远程仓库
  19. 保存登录plsql developer 的用户名和密码
  20. 雷林鹏分享:C# 多态性

热门文章

  1. Android 在子线程中更新UI的几种方法
  2. node 调用Python exec child_process 模块
  3. sqlplus登录信息,列出所有表,列在表结构,sqlplus行和列显示设置,别名,Null值问题,细木工,DISTINCT
  4. UVA 548(二进制重建和遍历)
  5. 分布式高级(十三)Docker Container之间的数据共享
  6. .Net Remoting的双向通信和Windows Service的宿主服务
  7. OpenCV 图像清晰度评价(相机自动对焦)
  8. Python 爬虫 —— BeautifulSoup
  9. OpenGL(十二) 纹理映射(贴图)
  10. 避免让WPF资源字典变得杂乱臃肿