欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種內(nèi)存監(jiān)控管理的方法及系統(tǒng)的制作方法

文檔序號:6611850閱讀:182來源:國知局
專利名稱:一種內(nèi)存監(jiān)控管理的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及軟件技術(shù)領(lǐng)域,尤其涉及內(nèi)存監(jiān)控管理技術(shù)領(lǐng)域。
背景技術(shù)
C語言沒有內(nèi)存回收管理機制和內(nèi)存訪問越界檢查,因此應(yīng)用程序開發(fā)人 員在進(jìn)行程序設(shè)計時,較容易遇到內(nèi)存泄漏和內(nèi)存非法訪問的問題。
內(nèi)存泄露主要由于不斷分配的內(nèi)存無法及時地被釋放,久而久之,系統(tǒng)的
內(nèi)存耗盡。造成內(nèi)存泄露的原因比較多,有可能這本身是庫中的bug,也有可
能是因為程序員沒有正確理解它們的接口說明文檔造成錯用等。
內(nèi)存非法訪問是指軟件在進(jìn)行內(nèi)存訪問時引起的錯誤,這種錯誤總體表現(xiàn)
為兩種形式 一種是讀寫地址引用錯誤;另一種是讀寫權(quán)限違反許可。
總之,由于內(nèi)存泄漏和內(nèi)存非法訪問是發(fā)生在程序的運行期,因此出現(xiàn)這
類問題后,定位到相關(guān)源代碼往往比較困難。

發(fā)明內(nèi)容
本發(fā)明提供一種內(nèi)存監(jiān)控管理的方法及系統(tǒng),用以解決內(nèi)存泄露和內(nèi)存非 法訪問的定位問題。
本發(fā)明提供了一種內(nèi)存監(jiān)控管理的方法,包括
A、 將內(nèi)存管理模塊集成到應(yīng)用程序中;
B、 所述內(nèi)存管理模塊對應(yīng)用程序運行時的內(nèi)存分配與訪問進(jìn)行監(jiān)控,跟 蹤記錄內(nèi)存泄漏和/或非法訪問信息;
C、 定期上報所述內(nèi)存泄露和/或非法訪問信息給用戶,以便于用戶根據(jù)所
述內(nèi)存泄露和/或非法訪問信息定位到相關(guān)代碼。
進(jìn)一步地,上述方法中,所述步驟A具體包括
Al、將內(nèi)存管理模塊源代碼添加到目標(biāo)工程中; A2、引入重載函數(shù);
A3、在程序初始化啟動時根據(jù)應(yīng)用程序?qū)嶋H需求,創(chuàng)建一預(yù)定大小的內(nèi)存
池;
A4、設(shè)置內(nèi)存檢測定時器。
進(jìn)一步地,上述方法中,所述步驟A還包括
A5、設(shè)置—-MEM—DEBUG—編譯選項,該選項可以控制應(yīng)用程序編譯時是否 集成內(nèi)存管理模塊,編譯目標(biāo)工程。 進(jìn)一步地,所述步驟A3具體包括
利用邊界保護(hù)方法,在內(nèi)存池兩端各預(yù)留預(yù)定大小的保護(hù)邊界空間; 利用伙伴算法將內(nèi)存劃分成多個內(nèi)存塊,所述內(nèi)存塊包含內(nèi)存管理信息塊 和應(yīng)用程序數(shù)據(jù)內(nèi)存塊。 所述步驟A3還包括
將所述內(nèi)存塊同時掛接在紅黑樹和宏定義鏈表上。
所述內(nèi)存管理信息塊中記錄有內(nèi)存分配的上下文信息,所述上下文信息包
括源代碼文件名稱和所在行號。
進(jìn)一步地,所述步驟C具體包括
定期上報所述內(nèi)存泄露和/或非法訪問信息給用戶;
用戶對所述內(nèi)存非法訪問信息分析進(jìn)行分析,定位內(nèi)存非法訪問代碼行; 和/或,比較前后內(nèi)存泄露信息的差異來診斷是否存在內(nèi)存泄漏,定位內(nèi)存泄漏 代碼行。
本發(fā)明還提供了一種內(nèi)存監(jiān)控管理的系統(tǒng),包括
內(nèi)存管理模塊,用于對應(yīng)用程序運行時的內(nèi)存分配與訪問進(jìn)行監(jiān)控,跟蹤
記錄內(nèi)存泄漏和/或非法訪問信息;
集成模塊,用于將內(nèi)存管理模塊集成到應(yīng)用程序中;
信息上報模塊,用于定期上報所述內(nèi)存泄露和/或非法訪問信息給用戶,以 便于用戶根據(jù)所述內(nèi)存泄露和/或非法訪問信息定位到相關(guān)代碼。
進(jìn)一步地,上述系統(tǒng)中,所述集成模塊具體包括
源代碼添加單元,用于將內(nèi)存管理模塊源代碼添加到目標(biāo)工程中; 函數(shù)重載單元,用于引入重載函數(shù);
內(nèi)存池創(chuàng)建單元,用于在程序初始化啟動時根據(jù)應(yīng)用程序?qū)嶋H需求,創(chuàng)建 一預(yù)定大小的內(nèi)存池。
所述內(nèi)存池包括兩端保護(hù)邊界空間和多個內(nèi)存塊,所述內(nèi)存塊包括內(nèi) 存管理信息塊和應(yīng)用程序數(shù)據(jù)內(nèi)存塊;
內(nèi)存管理信息塊,用于記錄內(nèi)存分配的上下文信息,所述上下文信息包括 源代碼文件名稱和所在行號;
應(yīng)用程序數(shù)據(jù)內(nèi)存塊,用于存儲應(yīng)用程序的數(shù)據(jù)。
所述內(nèi)存塊同時桂接在紅黑樹和宏定義鏈表上。
綜上所述,本發(fā)明實施例提供了一種內(nèi)存監(jiān)控管理的方法及系統(tǒng),通過使 用內(nèi)存池、伙伴算法、紅黑樹算法以及宏定義鏈表這幾項關(guān)鍵技術(shù),在很大程 度上保證了應(yīng)用程序內(nèi)存使用安全,提高了內(nèi)存分配效率,利用內(nèi)存管理信息 塊跟蹤記錄內(nèi)存分配使用信息,在發(fā)生內(nèi)存非法使用時,及時記錄運行時日志, 為開發(fā)人員分析定位問題提供充分依據(jù),能夠節(jié)約很大一部分開發(fā)調(diào)試時間。


圖1為本發(fā)明實施例所述內(nèi)存管理模塊集成的流程示意圖2為本發(fā)明實施例所述內(nèi)存池的結(jié)構(gòu)示意圖; 圖3為本發(fā)明實施例所述系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施例方式
本發(fā)明實施例的目的是為C語言(包括VC、 0++等)應(yīng)用程序開發(fā)者提供
一種高效的內(nèi)存監(jiān)控和管理模塊,該模塊可以集成到應(yīng)用程序中,并對應(yīng)用程
序運行時的內(nèi)存分配與訪問進(jìn)行監(jiān)控,跟蹤記錄內(nèi)存泄漏和非法訪問信息,為
開發(fā)人員快速準(zhǔn)確定位程序問題提供回溯依據(jù)。
下面結(jié)合附圖對本發(fā)明實施例所述方法進(jìn)行詳細(xì)說明。 首先,將內(nèi)存管理^t塊集成到應(yīng)用程序中;具體如圖l所示,圖l為內(nèi)存 管理模塊集成到應(yīng)用程序的流程示意圖,具體包括以下步驟
步驟101:將內(nèi)存管理模塊源代碼添加到目標(biāo)工程中。
步驟102:在目標(biāo)C文件中增加并include "./mem/dmal loc. h"引用,引入 重載函數(shù);具體的說就是,對C語言庫最基本的內(nèi)存分配、釋放、復(fù)制、設(shè)置、 比較函數(shù)和字符串操作函數(shù)作宏定義重載,即用自定義的mem_alloc函數(shù)系列 對系統(tǒng)的malloc等內(nèi)存操作函數(shù)進(jìn)行封裝,增加內(nèi)存使用監(jiān)控代碼,再以封 裝后的代碼替換原函數(shù)的實現(xiàn),從而實現(xiàn)函數(shù)的宏定義重載,以下簡稱重載函 數(shù)。
<吏用自定義的mem—al loc重載mal loc的示例 #undef malloc
#define malloc(size) mem_alloc ((size), —FILE—, —LINE—)
通過重載函數(shù)策略,內(nèi)存監(jiān)控模塊確保了重載前后應(yīng)用程序?qū)語言庫函
數(shù)的接口調(diào)用的 一致性,同時也實現(xiàn)了內(nèi)存管理模塊的自定義功能。
步驟103:在程序初始化啟動時根據(jù)應(yīng)用程序?qū)嶋H需求,創(chuàng)建一定大小的 內(nèi)存池;
步驟104:設(shè)置內(nèi)存檢測定時器;
步驟105:設(shè)置—MEM_DEBUG——編譯選項,該選項可以控制應(yīng)用程序編譯時 是否集成內(nèi)存管理模塊,編譯目標(biāo)工程。
其中,步驟103中,創(chuàng)建內(nèi)存池的過程具體包括
采用在內(nèi)存池的邊界設(shè)置SAFE_MARGIN (邊界保護(hù))的方法,在內(nèi)存池兩 端各預(yù)留一定大小(如1M)的保護(hù)邊界空間,具體應(yīng)用中可以才艮據(jù)實際情況修 改保護(hù)空間的大小,確保該內(nèi)存塊的安全;
利用伙伴算法對大內(nèi)存塊進(jìn)行細(xì)分,每塊內(nèi)存塊包含一個內(nèi)存管理信息塊 (area-t)和應(yīng)用程序數(shù)據(jù)內(nèi)存塊(data),內(nèi)存管理信息塊中記錄了內(nèi)存分 配時的源文件、代碼行、分配時間、使用標(biāo)志和內(nèi)存塊大小的級別,為內(nèi)存泄 漏檢查和內(nèi)存使用監(jiān)控提供依據(jù);
將所述內(nèi)存塊同時掛接在紅黑樹和宏定義鏈表上。 上述對分配一整塊內(nèi)存塊(系統(tǒng)預(yù)定義大小)進(jìn)行細(xì)分后的內(nèi)存池結(jié)構(gòu), 具體如圖2所示。
當(dāng)應(yīng)用程序調(diào)試啟動后,定期上報所述內(nèi)存泄露和/或非法訪問信息給用 戶,以便于用戶根據(jù)所述內(nèi)存泄露和/或非法訪問信息定位到相關(guān)代碼,包括 定期上報所述內(nèi)存泄露和/或非法訪問信息給用戶;
用戶對所述內(nèi)存非法訪問信息分析進(jìn)行分析,定位內(nèi)存非法訪問代碼行; 和/或,比較前后內(nèi)存泄露信息的差異來診斷是否存在內(nèi)存泄漏,定位內(nèi)存泄漏 代碼行。
具體的說就是,在應(yīng)用程序調(diào)時過程中,內(nèi)存管理模塊對所述內(nèi)存塊的狀 況進(jìn)行監(jiān)控,并定期上報內(nèi)存泄露和/或非法訪問信息,將內(nèi)存非法訪問信息記
錄在內(nèi)存非法訪問日志文件(如dmem. log文件)中,該文件記錄了內(nèi)存越界 訪問、訪問無效指針、內(nèi)存重復(fù)分配代碼所在源文件、源代碼行號和操作的內(nèi) 存地址;將內(nèi)存泄漏信息記錄在內(nèi)存泄露日志文件(如memleak文件)中,該 文件記錄了內(nèi)存分配代碼所在源文件、源代碼行號、4乘作的內(nèi)存地址、內(nèi)存分 配時間和分配的內(nèi)存塊大小。
這樣,用戶可以通過對dmem. log文件的分析,定位內(nèi)存非法訪問;通過 實時監(jiān)控memleak文件內(nèi)容的變化,定位內(nèi)存泄漏問題。具體的內(nèi)存泄漏定位 方法是啟動監(jiān)控^t塊進(jìn)入穩(wěn)定狀態(tài)后,^r查memleak文件記錄應(yīng)用程序初始 化分配的動態(tài)內(nèi)存,之后,按一定時間間隔檢查memleak文件日志的變化,比 較前后兩次跟蹤日志的差異來診斷是否存在內(nèi)存泄漏,以及定位內(nèi)存泄漏代碼 行。
下面結(jié)合附圖對本發(fā)明實施例所述系統(tǒng)進(jìn)行詳細(xì)說明。
如圖3所示,本發(fā)明實施例所述內(nèi)存監(jiān)控管理的系統(tǒng)具體包括內(nèi)存管理
模塊、集成模塊、信息上報模塊,其中,
內(nèi)存管理模塊,用于對應(yīng)用程序運行時的內(nèi)存分配與訪問進(jìn)行監(jiān)控,跟蹤
記錄內(nèi)存泄漏和/或非法訪問信息。
集成模塊,用于將內(nèi)存管理模塊集成到應(yīng)用程序中;所述集成模塊具體包

源代碼添加單元,用于將內(nèi)存管理模塊源代碼添加到目標(biāo)工程中; 函數(shù)重載單元,用于引入重載函數(shù);具體的說就是,在目標(biāo)C文件中增加 弁include "./mem/dmalloc. h"引用,引入重載函數(shù);具體的說就是,對C語言
庫最基本的內(nèi)存分配、釋放、復(fù)制、設(shè)置、比較函數(shù)和字符串操作函數(shù)作宏定
義重載,即用自定義的mem-alloc函數(shù)系列對系統(tǒng)的malloc等內(nèi)存操作函數(shù) 進(jìn)行封裝,增加內(nèi)存使用監(jiān)控代碼,再以封裝后的代碼替換原函數(shù)的實現(xiàn),從 而實現(xiàn)函數(shù)的宏定義重載;
內(nèi)存池創(chuàng)建單元,用于在程序初始化啟動時根據(jù)應(yīng)用程序?qū)嶋H需求,創(chuàng)建 一預(yù)定大小的內(nèi)存池;所述內(nèi)存池的結(jié)構(gòu)如圖2所示,包括兩端保護(hù)邊界空 間和多個內(nèi)存塊,所述內(nèi)存塊包括內(nèi)存管理信息塊和應(yīng)用程序數(shù)據(jù)內(nèi)存塊;
內(nèi)存管理信息塊,用于記錄內(nèi)存分配的上下文信息,所述上下文信息包括 源代碼文件名稱和所在行號;
應(yīng)用程序數(shù)據(jù)內(nèi)存塊,用于存儲應(yīng)用程序的數(shù)據(jù)。
所述內(nèi)存塊同時掛接在紅黑樹和宏定義鏈表上。
信息上報模塊,用于定期上報所述內(nèi)存泄露和/或非法訪問信息給用戶,以 便于用戶根據(jù)所述內(nèi)存泄露和/或非法訪問信息定位到相關(guān)代碼;具體的說就 是,在應(yīng)用程序調(diào)試過程中,所述信息上報模塊定期上報內(nèi)存泄露和/或非法訪 問信息,將內(nèi)存非法訪問信息記錄在內(nèi)存非法訪問日志文件(如dmem. log文 件)中,該文件記錄了內(nèi)存越界訪問、訪問無效指針、內(nèi)存重復(fù)分配代碼所在 源文件、源代碼行號和操作的內(nèi)存地址;將內(nèi)存泄漏信息記錄在內(nèi)存泄露曰志 文件(如memleak文件)中,該文件記錄了內(nèi)存分配代碼所在源文件、源代碼 行號、操作的內(nèi)存地址、內(nèi)存分配時間和分配的內(nèi)存塊大小。
綜上所述,本發(fā)明實施例提供了一種內(nèi)存監(jiān)控管理的方法及系統(tǒng),通過使 用內(nèi)存池、伙伴算法、紅黑樹算法以及宏定義鏈表這幾項關(guān)鍵技術(shù),在很大程 度上保證了應(yīng)用程序內(nèi)存使用安全,提高了內(nèi)存分配效率,利用內(nèi)存管理信息
塊跟蹤記錄內(nèi)存分配使用信息,在發(fā)生內(nèi)存非法使用時,及時記錄運行時日志, 為開發(fā)人員分析定位問題提供充分依據(jù),能夠節(jié)約很大一部分開發(fā)調(diào)試時間。 本發(fā)明實施例所述方法及系統(tǒng)在電信VC項目開發(fā)過程中,尤其可以發(fā)揮
其重要的作用,由于該項目中對diameter協(xié)議的解析使用了大量的動態(tài)內(nèi)存
涉及協(xié)議解析部分的內(nèi)存塊通常都比較小,且隨著項目的進(jìn)一步開展,程序的 代碼量和復(fù)雜度成倍增加,在這種情況下要定位內(nèi)存泄漏,特別是定位隱示內(nèi) 存泄漏將變得及其困難。本發(fā)明實施例所述方法及系統(tǒng)通過將該工具與工程文 件集成在一起進(jìn)行開發(fā),通過分析工程中內(nèi)存使用概況,定時觀察程序?qū)?nèi)存 的使用情況,很快診斷出內(nèi)存泄漏所在,并成功解決,為項目的開展帶來很有 效的輔助手段。
以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護(hù)范圍并不局 限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易 想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù) 范圍應(yīng)該以權(quán)利要求書的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1、一種內(nèi)存監(jiān)控管理的方法,其特征在于,包括A、將內(nèi)存管理模塊集成到應(yīng)用程序中;B、所述內(nèi)存管理模塊對應(yīng)用程序運行時的內(nèi)存分配與訪問進(jìn)行監(jiān)控,跟蹤記錄內(nèi)存泄漏和/或非法訪問信息;C、定期上報所述內(nèi)存泄露和/或非法訪問信息給用戶,以便于用戶根據(jù)所述內(nèi)存泄露和/或非法訪問信息定位到相關(guān)代碼。
2、 如權(quán)利要求l所述的方法,其特征在于,所述步驟A具體包括Al、將內(nèi)存管理模塊源代碼添加到目標(biāo)工程中; A2、引入重載函數(shù);A3、在程序初始化啟動時根據(jù)應(yīng)用程序?qū)嶋H需求,創(chuàng)建一預(yù)定大小的內(nèi)存池;A4、設(shè)置內(nèi)存檢測定時器。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟A還包括A5、設(shè)置—MEM—DEBUG-—編譯選項,該選項可以控制應(yīng)用程序編譯時是否 集成內(nèi)存管理模塊,編譯目標(biāo)工程。
4、 根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述步驟A3具體包括 利用邊界保護(hù)方法,在內(nèi)存池兩端各預(yù)留預(yù)定大小的保護(hù)邊界空間;利用伙伴算法將內(nèi)存劃分成多個內(nèi)存塊,所述內(nèi)存塊包含內(nèi)存管理信息塊 和應(yīng)用程序數(shù)據(jù)內(nèi)存塊。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述步驟A3還包括 將所述內(nèi)存塊同時桂接在紅黑樹和宏定義鏈表上。
6、 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述內(nèi)存管理信息塊中記錄有內(nèi)存分配的上下文信息,所述上下文信息包括源代碼文件名稱和所在行號。
7、 根據(jù)權(quán)利要求1到3中任意一項所述的方法,其特征在于,所述步驟C 具體包括定期上報所述內(nèi)存泄露和/或非法訪問信息給用戶;用戶對所述內(nèi)存非法訪問信息分析進(jìn)行分析,定位內(nèi)存非法訪問代碼行; 和/或,比較前后內(nèi)存泄露信息的差異來診斷是否存在內(nèi)存泄漏,定位內(nèi)存泄漏 代碼行。
8、 一種內(nèi)存監(jiān)控管理的系統(tǒng),其特征在于,包括內(nèi)存管理模塊,用于對應(yīng)用程序運行時的內(nèi)存分配與訪問進(jìn)行監(jiān)控,跟蹤 記錄內(nèi)存泄漏和/或非法訪問信息;集成模塊,用于將內(nèi)存管理模塊集成到應(yīng)用程序中;信息上報模塊,用于定期上報所述內(nèi)存泄露和/或非法訪問信息給用戶,以 便于用戶根據(jù)所述內(nèi)存泄露和/或非法訪問信息定位到相關(guān)代碼。
9、 根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述集成模塊具體包括源代碼添加單元,用于將內(nèi)存管理模塊源代碼添加到目標(biāo)工程中; 函數(shù)重載單元,用于引入重載函數(shù);內(nèi)存池創(chuàng)建單元,用于在程序初始化啟動時根據(jù)應(yīng)用程序?qū)嶋H需求,創(chuàng)建 一預(yù)定大小的內(nèi)存池。
10、 根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述內(nèi)存池包括兩端保 護(hù)邊界空間和多個內(nèi)存塊,所述內(nèi)存塊包括內(nèi)存管理信息塊和應(yīng)用程序數(shù)據(jù) 內(nèi)存塊;內(nèi)存管理信息塊,用于記錄內(nèi)存分配的上下文信息,所述上下文信息包括: 源代碼文件名稱和所在行號; 應(yīng)用程序數(shù)據(jù)內(nèi)存塊,用于存儲應(yīng)用程序的數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種內(nèi)存監(jiān)控管理的方法及系統(tǒng),包括A.將內(nèi)存管理模塊集成到應(yīng)用程序中;B.所述內(nèi)存管理模塊對應(yīng)用程序運行時的內(nèi)存分配與訪問進(jìn)行監(jiān)控,跟蹤記錄內(nèi)存泄漏和/或非法訪問信息;C.定期上報所述內(nèi)存泄露和/或非法訪問信息給用戶,以便于用戶根據(jù)所述內(nèi)存泄露和/或非法訪問信息定位到相關(guān)代碼。綜上所述,本發(fā)明實施例提供了一種內(nèi)存監(jiān)控管理的方法及系統(tǒng),通過跟蹤記錄內(nèi)存分配使用信息,在發(fā)生內(nèi)存非法使用或內(nèi)存泄露時,及時記錄運行時日志,為開發(fā)人員分析定位問題提供充分依據(jù),能夠節(jié)約很大一部分開發(fā)調(diào)試時間。
文檔編號G06F9/46GK101110044SQ20071014554
公開日2008年1月23日 申請日期2007年8月28日 優(yōu)先權(quán)日2007年8月28日
發(fā)明者鄭興友, 洪 高 申請人:中興通訊股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
台中县| 云南省| 南平市| 上高县| 洛宁县| 通化市| 茶陵县| 和田县| 湖北省| 德昌县| 丰原市| 东阿县| 东安县| 大连市| 电白县| 泰兴市| 安义县| 水城县| 黄浦区| 仁寿县| 措美县| 林周县| 昭平县| 西和县| 威信县| 信宜市| 徐闻县| 吉木乃县| 许昌市| 临邑县| 宜城市| 德安县| 沿河| 泗水县| 杨浦区| 石柱| 湖口县| 盐边县| 溧水县| 东阳市| 铅山县|