專利名稱:一種檢測內(nèi)存泄露的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種4企測內(nèi)存泄露的方法。
技術(shù)背景一般內(nèi)存泄漏是指堆內(nèi)存的泄漏。堆內(nèi)存是程序從堆中分配的, 使用完后必須顯式釋放的內(nèi)存,否則,這塊內(nèi)存既不能被操作系統(tǒng)回 收,也無法被程序再次使用,即產(chǎn)生了內(nèi)存泄漏。內(nèi)存泄漏可能導(dǎo)致程序運(yùn)行異常,對長期運(yùn)行的程序影響更大。 長時(shí)間的內(nèi)存泄漏測試與產(chǎn)品盡快上市的需求常常矛盾,而實(shí)際情況 往往是測試時(shí)間不足。緩慢出現(xiàn)的小內(nèi)存塊泄漏經(jīng)常無法在測試中被 發(fā)現(xiàn),可能在客戶使用足夠長的時(shí)間后出現(xiàn)問題。在這種情況下,需 要針對內(nèi)存泄漏建立專門的機(jī)制來保存錯(cuò)誤環(huán)境,幫助開發(fā)人員復(fù)現(xiàn) 環(huán)境,否則只能通過排查代碼來尋找故障點(diǎn),會耗費(fèi)大量人力?,F(xiàn)有 的檢測內(nèi)存泄露的方法根據(jù)內(nèi)存的生存時(shí)間是否過長或者申請釋放是 否成對來判斷是否發(fā)生了泄漏,如果存在內(nèi)存泄漏,當(dāng)剩余內(nèi)存的大 小進(jìn)入警界范圍時(shí),通過保存內(nèi)存狀態(tài)以備將來復(fù)現(xiàn)故障,并釋放泄 漏的內(nèi)存,使程序能獲得足夠多的內(nèi)存正常運(yùn)行。這些實(shí)現(xiàn)方法有一個(gè)缺點(diǎn)由于一些動態(tài)申請的內(nèi)存塊在程序運(yùn)行期間始終不會^皮釋力文, 它們的生命周期等同于程序的生命周期,按上述方法這類內(nèi)存塊都會 被誤判為內(nèi)存泄漏。由于內(nèi)存泄漏檢測模塊還會釋放被認(rèn)為發(fā)生了泄 漏的內(nèi)存塊以使程序能獲得足夠多的內(nèi)存正常運(yùn)行,若釋放了這些被 誤判為內(nèi)存泄漏的內(nèi)存而導(dǎo)致程序正常使用的內(nèi)存塊被錯(cuò)誤釋放掉, 就可能產(chǎn)生程序異常等嚴(yán)重后果。發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是提供一種能提高內(nèi)存泄露4企測準(zhǔn)確率 的檢測內(nèi)存泄露的方法。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是一種檢測內(nèi)存泄露的方法,其特征在于,包括第一步,建立動態(tài)存儲內(nèi)存塊信息的鏈表,并設(shè)定同一申請位置 長生存時(shí)間內(nèi)存塊數(shù)量閾值;第二步,遍歷所述鏈表,檢查各鏈表元素存儲的內(nèi)存塊信息得到 各內(nèi)存塊的生存時(shí)間,將各長生存時(shí)間內(nèi)存塊根據(jù)所述各長生存時(shí)間 內(nèi)存塊被申請的位置分類,若同一申請位置上被申請的所述長生存時(shí) 間內(nèi)存塊數(shù)量大于所述同一申請位置長生存時(shí)間內(nèi)存塊數(shù)量閾值,則 認(rèn)為所述各長生存時(shí)間內(nèi)存塊發(fā)生了內(nèi)存泄露。上述方案中,所述同 一 申請位置是指進(jìn)行內(nèi)存塊申請的同 一文件 的同一行且同一列的位置。上述方案中,所述生存時(shí)間是指檢查內(nèi)存塊信息的當(dāng)前時(shí)間與所 述內(nèi)存塊的分配時(shí)間之差。上述方案中,所述各長生存時(shí)間的內(nèi)存塊是指各生存時(shí)間超過預(yù) 設(shè)的生存時(shí)間門限的內(nèi)存塊。上述方案中,所述內(nèi)存塊信息包括指向所述內(nèi)存塊的指針、所述 內(nèi)存塊的大小、所述內(nèi)存塊的分配時(shí)間以及申請所述內(nèi)存塊的位置信 自上述方案中,所述內(nèi)存塊的位置信息包括申請所述內(nèi)存塊的文件 的文件名、行號及列號,所述位置信息通過對應(yīng)的編號存儲。本發(fā)明的有益效果主要表現(xiàn)在本發(fā)明提供的技術(shù)方案通過設(shè)定 同 一申請位置長生存時(shí)間內(nèi)存塊數(shù)量閾值,在小幅增加額外開銷的前 提下,提高了內(nèi)存泄露檢測的準(zhǔn)確率。
圖1為本發(fā)明檢測內(nèi)存泄露的方法流程圖。
具體實(shí)施方式
下面結(jié)合附圖對本發(fā)明作進(jìn)一步的描述。如圖l所示,建立動態(tài)存儲內(nèi)存塊信息的鏈表并設(shè)定同一申請位 置長生存時(shí)間內(nèi)存塊數(shù)量閥值M,所述內(nèi)存塊信息包括指向所述內(nèi)存 塊的指針、所述內(nèi)存塊的大小、所述內(nèi)存塊的分配時(shí)間以及申請所述 內(nèi)存塊的位置信息,所述內(nèi)存塊的位置信息包括申請所述內(nèi)存塊的文 件的文件名、行號及列號,所述位置信息通過對應(yīng)的編號存儲。申請 內(nèi)存塊時(shí),將對應(yīng)的內(nèi)存塊信息加入鏈表,釋放已申請的內(nèi)存塊時(shí), 將對應(yīng)的內(nèi)存塊信息從鏈表中刪除;進(jìn)行內(nèi)存泄露檢測時(shí),遍歷所述 鏈表,檢查各*元素存儲的內(nèi)存塊信息得到各內(nèi)存塊的生存時(shí)間, 即計(jì)算檢查內(nèi)存塊信息的當(dāng)前時(shí)間與所述內(nèi)存塊的分配時(shí)間之差,而 后將各長生存時(shí)間內(nèi)存塊根據(jù)其被申請的位置分類,若同一申請位置 上被申請的所述長生存時(shí)間內(nèi)存塊數(shù)量大于所述同一申請位置長生存 時(shí)間內(nèi)存塊數(shù)量閾值M,則認(rèn)為所述各長生存時(shí)間內(nèi)存塊發(fā)生了內(nèi)存 泄露;其中,同一申請位置是指進(jìn)行內(nèi)存塊申請的同一文件的同一行 且同一列的位置,長生存時(shí)間的內(nèi)存塊是指生存時(shí)間超過預(yù)設(shè)的生存 時(shí)間門限的內(nèi)存塊。若M-2,且擁有同一申請位置的3個(gè)內(nèi)存塊屬于 長生存時(shí)間的內(nèi)存塊,則這三個(gè)內(nèi)存塊被認(rèn)為是發(fā)生了內(nèi)存泄露。
權(quán)利要求
1、 一種檢測內(nèi)存泄露的方法,其特征在于,包括第一步,建立動態(tài)存儲內(nèi)存塊信息的鏈表,并設(shè)定同一申請位置 長生存時(shí)間內(nèi)存塊數(shù)量閾值;第二步,遍歷所述鏈表,檢查各鏈表元素存儲的內(nèi)存塊信息得到 各內(nèi)存塊的生存時(shí)間,將各長生存時(shí)間內(nèi)存塊根據(jù)所述各長生存時(shí)間 內(nèi)存塊被申請的位置分類,若同一申請位置上被申請的所述長生存時(shí) 間內(nèi)存塊數(shù)量大于所述同一申請位置長生存時(shí)間內(nèi)存塊數(shù)量閾值,則 認(rèn)為所述各長生存時(shí)間內(nèi)存塊發(fā)生了內(nèi)存泄露。
2、 如權(quán)利要求1所述的檢測內(nèi)存泄露的方法,其特征在于所述 同 一 申請位置是指進(jìn)行內(nèi)存塊申請的同 一文件的同 一行且同 一列的位置。
3、 如權(quán)利要求2所述的檢測內(nèi)存泄露的方法,其特征在于所述 生存時(shí)間是指檢查內(nèi)存塊信息的當(dāng)前時(shí)間與所述內(nèi)存塊的分配時(shí)間之 差。
4、 如權(quán)利要求3所述的檢測內(nèi)存泄露的方法,其特征在于所 述各長生存時(shí)間的內(nèi)存塊是指各生存時(shí)間超過預(yù)設(shè)的生存時(shí)間門限的 內(nèi)存塊。
5、 如權(quán)利要求1至4其中之一所述的檢測內(nèi)存泄露的方法,其特 征在于所述內(nèi)存塊信息包括指向所述內(nèi)存塊的指針、所述內(nèi)存塊的 大小、所述內(nèi)存塊的分配時(shí)間以及申請所述內(nèi)存塊的位置信息。
6、 如權(quán)利要求5所述的檢測內(nèi)存泄露的方法,其特征在于所述 內(nèi)存塊的位置信息包括申請所述內(nèi)存塊的文件的文件名、行號及列號, 所述位置信息通過對應(yīng)的編號存儲。
全文摘要
本發(fā)明公開了一種檢測內(nèi)存泄露的方法,第一步,建立動態(tài)存儲內(nèi)存塊信息的鏈表,并設(shè)定同一申請位置長生存時(shí)間內(nèi)存塊數(shù)量閾值;第二步,遍歷所述鏈表,檢查各鏈表元素存儲的內(nèi)存塊信息得到各內(nèi)存塊的生存時(shí)間,將各長生存時(shí)間內(nèi)存塊根據(jù)所述各長生存時(shí)間內(nèi)存塊被申請的位置分類,若同一申請位置上被申請的所述長生存時(shí)間內(nèi)存塊數(shù)量大于所述同一申請位置長生存時(shí)間內(nèi)存塊數(shù)量閾值,則認(rèn)為所述各長生存時(shí)間內(nèi)存塊發(fā)生了內(nèi)存泄露。本發(fā)明所述技術(shù)方案在小幅增加額外開銷的前提下,提高了內(nèi)存泄露檢測的準(zhǔn)確率。
文檔編號G06F11/36GK101145128SQ20071007494
公開日2008年3月19日 申請日期2007年6月13日 優(yōu)先權(quán)日2007年6月13日
發(fā)明者李大夜, 剛 陳 申請人:中興通訊股份有限公司