麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

Delphi編程技巧(一)內存管理

2019-11-18 18:26:18
字體:
來源:轉載
供稿:網友

Delphi自動管理的內存

Delphi原子變量,如Integer、Boolean、Record、枚舉等都是在作用域內編譯器自動申請內存,出了作用域自動釋放;另外,字符串、Variant、動態數組、接口也是由Delphi自動管理。

這些變量都是在中存儲的,除了接口。另外,Variant是程序員用函數手工創建的,例如VarArrayCreate;動態數組也是程序員用函數手工創建的,例如SetLength,但這兩種情況都不需要程序員自己釋放。

另外,還有一種變量需要注意,是使用Threadvar聲明的變量,它的作用域是一個線程。這主要用在編寫線程函數時,每一個線程使用一個線程局部存儲。

 

程序員手工管理的內存

指針對象是需要程序員手工申請和釋放的內存。

指針包括PCharPointer(無類型指針)、記錄指針、變量指針(指向原子變量)、函數指針(例如回調函數,分為全局函數和對象方法)。使用New函數來申請內存,使用Dispose來釋放指針。另外,GetMem、ReallocMemFreeMem也是一系列申請、釋放內存的函數,可以通過GetMemoryManagerSetMemoryManager函數來讀取和設置Delphi的三個內存管理函數。

對象包括TObjectIUnknown兩顆繼承樹繼承下來的子類對象。必須使用構造方法來構造對象。用構造方法(一般是Create,也可以不是,Delphi的編譯器只認constructor的關鍵字)創建的對象,如果你沒有指定擁有者,那么必須自己手動釋放,即便是指定了擁有者也需要看實際需要在特定的時刻釋放。釋放一般使用Free方法(IUnknown則不需要手工釋放),更好的方法是使用FreeAndNil(在Sysutils.pas單元),它既釋放占用的內存,同時釋放指針本身。

這些變量都是在中存儲的。另外一個需要注意的問題是,TList中的指針都需要程序員自己釋放。

 

注:

1、  回調函數不屬于內存管理的技術范疇,詳細內容參見《指針》部分。

2、  對象的詳細內容參見《對象模型》部分。

3、  一個指針被多個地方使用,而其中一個地方釋放了,其他地方再使用就會發生異常,這是一個使用指針應該注意的問題。詳細內存參見《指針》部分。

4、  傳遞指針有兩個很明顯的優勢:節省內存、提高速度。詳細內存參見《指針》和《設計技巧》部分。

5、  如何判斷對象和指針是一個技術性很強的主題,csdn上有一些講這個主題的帖子,還可以參見Aimingoo[email protected])寫的一篇名為《關于“如何檢測指針是否是對象”的深入探討》的文章。詳細內存參見《指針》和《對象》部分。

 

 

完成于2004-1-19。

版權所有,不當之處請不吝指正。


上一篇:在Delphi中實現StringTokenizer功能模塊

下一篇:在delphi中使用xml文檔有兩種方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: asiass极品裸体女pics | 成人一级黄色片 | 久久9色| av在线播放网址 | 超碰97人人艹 | 欧美日韩亚洲不卡 | 久久综合精品视频 | 久久影院yy6080 | 免看黄大片aa | 欧美精品成人一区二区在线观看 | 网站毛片 | 欧美成人精品一区二区三区 | 国产色爱综合网 | 麻豆国产一区 | 成人在线激情视频 | 中国3xxxx| 国产超碰人人做人人爱ⅴa 国产精品久久久久久久hd | 爱操视频| 久久久久9999 | 大学生一级毛片在线视频 | 视频www| 欧美ab | 免费一级电影 | 日韩av在线网址 | 欧美成人区| 国产精品久久久久久久久久 | 天天看成人免费毛片视频 | 国产精品午夜小视频观看 | 国产成人精品午夜 | 激情综合网俺也去 | 国产精品久久999 | 成年人视频免费看 | 黄网在线| 操网| 九九热在线视频观看 | 一级免费a | 久草在线手机视频 | 好吊一区二区三区 | 中文字幕在线观看精品 | 日韩色电影| 成人毛片视频免费看 |