国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

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

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

Delphi自動管理的內存

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

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

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

 

程序員手工管理的內存

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

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

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

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

 

注:

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

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

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

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

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

 

 

完成于2004-1-19

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


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

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

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

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 象州县| 霸州市| 鄂伦春自治旗| 镇远县| 惠州市| 集安市| 南开区| 湖口县| 锦屏县| 个旧市| 六枝特区| 乌苏市| 南木林县| 新绛县| 军事| 泰安市| 南投市| 观塘区| 周宁县| 顺昌县| 吉木萨尔县| 绍兴市| 永寿县| 朝阳区| 石城县| 宜都市| 广昌县| 高青县| 娄底市| 江永县| 泗水县| 乌兰察布市| 通城县| 寿宁县| 南投市| 通道| 南投市| 基隆市| 佳木斯市| 仙游县| 佳木斯市|