Delphi的記憶體管理及記憶體洩露問題

2022-04-01 12:24:35 字數 860 閱讀 1544

這幾天因為乙個程式長時間執行出現比較嚴重的記憶體洩露問題,開始關注了一下記憶體管理方面的東西,以前也注意記憶體管理,建立了物件及時釋放,但總有忘了處理的情況。

在delphi中沒有自動**機制,所以一定要及時釋放使用的記憶體,雖然有時小的記憶體洩露並不會造成太大的問題。

delphi中檢測記憶體洩露可以使用開源的fastmm(使用很簡單,在工程的第一行引用fastmm4即可(注意,一定要在第乙個uses的位置),可以在除錯程式時提示記憶體洩露情況,還可以生成報告。

在delphi2010中,使用更加簡單,只需要在工程開始的位置加上語句:

reportmemoryleaksonshutdown := debughook<>0;

就可以了,並且在執行時不會出現提示。如果想要生成檔案報告,還需要fastmm4,delphi2010中或許有別的設定可以生成檔案報告,沒有找到。

可以修改fastmm4options.inc中的引數開關來修改記憶體管理的相關設定。

後來在網上又發現了乙個說是讓delphi支援自動垃圾**的東東,很高興,看了一下:

有編譯好的,可以支援多種開發語言,也可以支援delphi,於是測試了一下,發現這個程式好像只是在系統退出時進行垃圾**,比如你有兩個窗體,form1和form2,form1呼叫form2,而form2中建立了乙個物件沒有釋放,則在你登出form2的時候form2中使用的物件的記憶體並沒有釋放,而是要等到程式結束,所以這種垃圾**時機有點晚了,如果你程式有大的記憶體洩露會導至系統記憶體問題的話,這個程式並不會幫你解決這個問題。(沒有詳細測試,哪位大俠有經驗可以指點指點  :-)   )

所以,最好的辦法還是你自己在寫程式的時候一定要注意釋放掉使用的記憶體,可以借助fastmm來幫你找可能的記憶體洩露。

附:fastmm的使用(**網路)

Delphi記憶體管理與記憶體洩漏探析

delphi記憶體管理與記憶體洩漏探析 楊繼巨集,龔 暉,李 治 摘引言 delphi是borland公司的劃時代之作,以其功能強大且易學 好用而受到廣大程式設計師的青睞。關於delphi的文章很多,大多數是討論其生產的高效率 各種應用的快速實現,卻忽視了乙個基本卻非常重要的問題記憶體動態 分配與安...

Delphi常用記憶體管理函式

1.new dispose getmem freemem newprocedure new var p pointer 建立乙個新的動態變數,並把指標p指向這個新建立的變數。分配的記憶體大小由p指標表示的型別決定。dispose procedure dispose var p pointer 用來釋...

使用 CrtSetDbgFlag檢測記憶體洩露

一 介紹 動態分配 記憶體是c c 程式語言乙個最強的特點,但是中國哲學家孫 sun tzu,我不知道是誰?那位知道?指出,最強的同時也是最弱的。這句話對c c 應用來說非常正確,在記憶體處理出錯的地方通常就是bugs產生的地方。乙個最敏感和難檢測的bug就是記憶體洩漏 沒有把前邊分配的記憶體成功釋...