TW201335752A - 記憶體檢測系統及方法 - Google Patents
記憶體檢測系統及方法 Download PDFInfo
- Publication number
- TW201335752A TW201335752A TW101107118A TW101107118A TW201335752A TW 201335752 A TW201335752 A TW 201335752A TW 101107118 A TW101107118 A TW 101107118A TW 101107118 A TW101107118 A TW 101107118A TW 201335752 A TW201335752 A TW 201335752A
- Authority
- TW
- Taiwan
- Prior art keywords
- memory
- pointer
- information
- function
- release
- Prior art date
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一種記憶體檢測系統,運行於電子設備中,該系統包括:定義模組,用於自定義一個動態庫,該動態庫包括記憶體分配攔截函數與記憶體釋放攔截函數;第一攔截模組,用於當該電子設備中的行程請求分配記憶體時,執行記憶體分配攔截函數,獲取並記錄記憶體分配資訊;第二攔截模組,用於當該電子設備中的行程請求釋放記憶體時,執行記憶體釋放攔截函數,獲取並記錄記憶體釋放資訊;及分析模組,用於根據記錄的記憶體分配資訊和記憶體釋放資訊,對記憶體的使用情況進行分析。本發明還提供一種記憶體檢測方法。
Description
本發明涉及一種記憶體檢測系統及方法,尤其關於一種對電子設備動態分配的記憶體進行檢測的系統及方法。
在手機等嵌入式電子設備中,記憶體資源較小,如果行程在使用之後不將其釋放,勢必導致電子設備性能下降,運行速度變慢,無法及時回應用戶的操作請求,甚至連正常功能都無法使用。
目前,對電子設備記憶體的檢測主要採用巨集替換或重定義的方法,該方法存在以下缺點:1.需要和源代碼一起編譯,只適合代碼的調試階段,不適合代碼的發行階段;2.只是簡單記錄行程記憶體動態分配的情況,在行程退出的時候,才能列印出沒有釋放的記憶體資訊,不能在運行過程中報告記憶體狀況,即沒有運行時動態檢測的功能。
鑒於以上內容,有必要提供一種記憶體檢測系統及方法,能夠即時動態地檢測記憶體的使用情況。
一種記憶體檢測系統,運行於電子設備中,該系統包括:定義模組,用於自定義一個動態庫,該自定義的動態庫包括記憶體分配攔截函數與記憶體釋放攔截函數;第一攔截模組,用於當該電子設備中的行程請求分配記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體分配攔截函數,獲取記憶體分配資訊並記錄到操作記錄中;第二攔截模組,用於當該電子設備中的行程請求釋放記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體釋放攔截函數,獲取記憶體釋放資訊並記錄到該操作記錄中;及分析模組,用於根據操作記錄中記錄的記憶體分配資訊和記憶體釋放資訊,對記憶體的使用情況進行分析。
一種記憶體檢測方法,應用於電子設備中,該方法包括:定義步驟,自定義一個動態庫,該自定義的動態庫包括記憶體分配攔截函數與記憶體釋放攔截函數;第一攔截步驟,當該電子設備中的行程請求分配記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體分配攔截函數,獲取記憶體分配資訊並記錄到操作記錄中;第二攔截步驟,當該電子設備中的行程請求釋放記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體釋放攔截函數,獲取記憶體釋放資訊並記錄到該操作記錄中;及分析步驟,根據操作記錄中記錄的記憶體分配資訊和記憶體釋放資訊,對記憶體的使用情況進行分析。
本發明採用自定義的動態庫攔截對記憶體的操作,該動態庫可單獨編譯,不影響程式設計語言原有的記憶體管理庫,可以與程式設計語言原有的記憶體管理庫協同工作。本發明對記憶體的檢測既可在調試階段,也可在運行階段。並且,本發明不必等到行程退出就可以告知記憶體有無洩漏以及釋放的情況,克服了傳統記憶體檢測方法所存在的缺陷。
參閱圖1所示,係本發明記憶體檢測系統較佳實施方式的應用環境示意圖。所述記憶體檢測系統10運行於電子設備11中。所述電子設備11包括儲存設備12、顯示設備13及處理器14。所述儲存設備12包括多種類型的儲存器(例如記憶體、外存、緩存),用於儲存記憶體檢測系統10的電腦化程式碼及運行過程中所需的資料。所述處理器14執行所述電腦化程式碼,對電子設備11動態分配的記憶體進行檢測。所述顯示設備13用於顯示記憶體檢測的結果。在本實施方式中,所述電子設備11是手機。
參閱圖2所示,係圖1中記憶體檢測系統10的功能模組圖。所述記憶體檢測系統10包括定義模組200、第一攔截模組210、第二攔截模組220及分析模組230。
所述定義模組200用於自定義一個動態庫,該自定義的動態庫包括記憶體分配攔截函數與記憶體釋放攔截函數。其中,記憶體分配攔截函數與程式設計語言(例如C或C++)標準庫函數中的記憶體分配函數同名,記憶體釋放攔截函數與程式設計語言標準庫函數中的記憶體釋放函數同名。例如,記憶體分配攔截函數命名為malloc,記憶體釋放攔截函數命名為free。
所述第一攔截模組210用於當該電子設備11中的行程請求分配記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體分配攔截函數,獲取記憶體分配資訊並記錄到操作記錄中。具體地,第一攔截模組210獲取記憶體分配函數的位址(即記憶體分配函數指針),從該記憶體分配函數的位址執行記憶體分配函數以分配行程所需的記憶體,並將分配的記憶體指針、分配的記憶體大小添加到操作記錄中。在本實施方式中,所述搜索自定義的動態庫透過設置環境變數來實現。例如,透過設置環境變數LD_PRELOAD指定載入該自定義的動態庫。
所述第二攔截模組220用於當該電子設備11中的行程請求釋放記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體釋放攔截函數,獲取記憶體釋放資訊並記錄到操作記錄中。具體地,第二攔截模組220獲取記憶體釋放函數的位址(即記憶體釋放函數指針),檢查記憶體釋放函數所要釋放的記憶體指針是否為空。若記憶體釋放函數所要釋放的記憶體指針為空,則在操作記錄中添加釋放空指針的資訊。否則,若記憶體釋放函數所要釋放的記憶體指針不為空,則在操作記錄中搜索是否有該記憶體指針的資訊。若在操作記錄中有該記憶體指針的資訊,則從記憶體釋放函數的位址執行記憶體釋放函數以對該記憶體指針對應的記憶體進行釋放,並且從操作記錄中抹除該記憶體指針對應的記憶體分配資訊。否則,若在記憶體分配的操作記錄中不存在該記憶體指針的資訊,則在操作記錄中添加釋放野指針的資訊。
在本實施方式中,所述操作記錄採用靜態分配的陣列來實現。陣列的每個元素是指向一個結構體的指針,每個結構體對應於一次對記憶體分配資訊/記憶體釋放資訊的攔截和記錄。結構體的成員包括記憶體分配資訊(如分配的記憶體指針、分配的記憶體大小)及記憶體釋放資訊(如釋放空指針、釋放野指針)。所述結構體的成員還包括指向下一個結構體的指針。每執行一次對記憶體分配資訊/記憶體釋放資訊的記錄後,修改該指向下一個結構體的指針,以用於下一次的記錄。
所述分析模組230用於根據操作記錄中的記憶體分配資訊和記憶體釋放資訊,對記憶體的使用情況進行分析。具體地,分析模組230根據操作記錄統計已分配的記憶體,並將已分配的記憶體與預先設定的最大記憶體需求量進行比對。若已分配的記憶體大於等於最大記憶體需求量,則在顯示設備13上提示用戶記憶體發生洩露;否則,若已分配的記憶體小於最大記憶體需求量,則在顯示設備13上提示用戶記憶體未發生洩露。此外,分析模組230從操作記錄中取出記憶體釋放資訊並顯示在顯示設備13上,根據記憶體釋放資訊通知用戶是否有空指針和野指針的操作。
本發明對記憶體使用情況的分析可以在行程退出時執行,也可以根據需要隨時執行。若需要在行程退出時對記憶體使用情況進行分析,則可以預先註冊行程退出時的處理函數,使得在行程退出時自動調用分析模組230對記憶體使用情況進行分析。如果是在行程運行過程中對記憶體使用情況進行分析,則在需要時執行該分析模組230。
參閱圖3所示,係本發明記憶體檢測方法較佳實施方式的流程圖。
步驟S301,定義模組200自定義一個動態庫,該自定義的動態庫包括記憶體分配攔截函數與記憶體釋放攔截函數。其中,記憶體分配攔截函數與程式設計語言(例如C或C++)標準庫函數中的記憶體分配函數同名,記憶體釋放攔截函數與程式設計語言標準庫函數中的記憶體釋放函數同名。例如,記憶體分配攔截函數命名為malloc,記憶體釋放攔截函數命名為free。
當該電子設備11中的行程請求分配記憶體時,步驟S302,第一攔截模組210搜索自定義的動態庫,執行該動態庫中的記憶體分配攔截函數,獲取記憶體分配資訊並記錄到操作記錄中。具體地,第一攔截模組210獲取記憶體分配函數的位址(即記憶體分配函數指針),從該記憶體分配函數的位址執行記憶體分配函數以分配行程所需的記憶體,並將分配的記憶體指針、分配的記憶體大小添加到操作記錄中。在本實施方式中,所述搜索自定義的動態庫透過設置環境變數來實現。
當該電子設備11中的行程請求釋放記憶體時,步驟S303,第二攔截模組220搜索自定義的動態庫,執行該動態庫中的記憶體釋放攔截函數,獲取記憶體釋放資訊並記錄到操作記錄中。具體地,第二攔截模組220獲取記憶體釋放函數的位址(即記憶體釋放函數指針),檢查記憶體釋放函數所要釋放的記憶體指針是否為空。若記憶體釋放函數所要釋放的記憶體指針為空,則在操作記錄中添加釋放空指針的資訊。否則,若記憶體釋放函數所要釋放的記憶體指針不為空,則在操作記錄中搜索是否有該記憶體指針的資訊。若在操作記錄中有該記憶體指針的資訊,則從記憶體釋放函數的位址執行記憶體釋放函數以對該記憶體指針對應的記憶體進行釋放,並且從操作記錄中抹除該記憶體指針對應的記憶體分配資訊。否則,若在記憶體分配的操作記錄中不存在該記憶體指針的資訊,則在操作記錄中添加釋放野指針的資訊。
步驟S304,分析模組230根據操作記錄中的記憶體分配資訊和記憶體釋放資訊,對記憶體的使用情況進行分析。具體地,分析模組230根據操作記錄統計已分配的記憶體,並將已分配的記憶體與預先設定的最大記憶體需求量進行比對。若已分配的記憶體大於等於最大記憶體需求量,則在顯示設備13上提示用戶記憶體發生洩露;否則,若已分配的記憶體小於最大記憶體需求量,則在顯示設備13上提示用戶記憶體未發生洩露。此外,分析模組230從操作記錄中取出記憶體釋放資訊並顯示在顯示設備13上,根據記憶體釋放資訊通知用戶是否有空指針和野指針的操作。
上述實施方式採用自定義的動態庫攔截對記憶體的操作,該動態庫可單獨編譯,不影響程式設計語言原有的記憶體管理庫,可以與程式設計語言原有的記憶體管理庫協同工作。本發明對記憶體的檢測既可在調試階段,也可在運行階段。並且,本發明不必等到行程退出就可以告知記憶體有無洩漏以及釋放的情況,克服了傳統記憶體檢測方法所存在的缺陷。
綜上所述,本發明符合發明專利要件,爰依法提出專利申請。惟,以上所述者僅為本發明之較佳實施方式,本發明之範圍並不以上述實施方式為限,舉凡熟悉本案技藝之人士援依本發明之精神所作之等效修飾或變化,皆應涵蓋於以下申請專利範圍內。
10...記憶體檢測系統
11...電子設備
12...儲存設備
13...顯示設備
14...處理器
200...定義模組
210...第一攔截模組
220...第二攔截模組
230...分析模組
圖1係本發明記憶體檢測系統較佳實施方式的應用環境示意圖。
圖2係圖1中記憶體檢測系統的功能模組圖。
圖3係本發明記憶體檢測方法較佳實施方式的流程圖。
10...記憶體檢測系統
200...定義模組
210...第一攔截模組
220...第二攔截模組
230...分析模組
Claims (10)
- 一種記憶體檢測系統,運行於電子設備中,該系統包括:
定義模組,用於自定義一個動態庫,該自定義的動態庫包括記憶體分配攔截函數與記憶體釋放攔截函數;
第一攔截模組,用於當該電子設備中的行程請求分配記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體分配攔截函數,獲取記憶體分配資訊並記錄到操作記錄中;
第二攔截模組,用於當該電子設備中的行程請求釋放記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體釋放攔截函數,獲取記憶體釋放資訊並記錄到該操作記錄中;及
分析模組,用於根據操作記錄中記錄的記憶體分配資訊和記憶體釋放資訊,對記憶體的使用情況進行分析。 - 如申請專利範圍第1項所述之記憶體檢測系統,其中所述第一攔截模組獲取記憶體分配資訊並記錄到操作記錄中包括:
獲取記憶體分配函數的位址;
從該記憶體分配函數的位址執行記憶體分配函數以分配行程所需的記憶體;及
將分配的記憶體指針、分配的記憶體大小添加到操作記錄中。 - 如申請專利範圍第2項所述之記憶體檢測系統,其中所述第二攔截模組獲取記憶體釋放資訊並記錄到操作記錄中包括:
獲取記憶體釋放函數的位址,檢查記憶體釋放函數所要釋放的記憶體指針是否為空;
若記憶體釋放函數所要釋放的記憶體指針為空,則在操作記錄中添加釋放空指針的資訊;
若記憶體釋放函數所要釋放的記憶體指針不為空,則在操作記錄中搜索是否有該記憶體指針的資訊;
若在操作記錄中有該記憶體指針的資訊,則從記憶體釋放函數的位址執行記憶體釋放函數以對該記憶體指針對應的記憶體進行釋放,並從操作記錄中抹除該記憶體指針對應的記憶體分配資訊;及
若在操作記錄中不存在該記憶體指針的資訊,則在操作記錄中添加釋放野指針的資訊。 - 如申請專利範圍第3項所述之記憶體檢測系統,其中所述分析模組根據對記憶體的使用情況進行分析包括:
根據操作記錄中記錄的記憶體分配資訊統計已分配的記憶體,並將已分配的記憶體與預先設定的最大記憶體需求量進行比對;
若已分配的記憶體大於等於最大記憶體需求量,則提示用戶記憶體發生洩露;及
若已分配的記憶體小於最大記憶體需求量,則提示用戶記憶體未發生洩露。 - 如申請專利範圍第3項所述之記憶體檢測系統,其中所述分析模組對記憶體的使用情況進行分析包括:
從操作記錄中取出記憶體釋放資訊並顯示在該電子設備的顯示設備上,根據記憶體釋放資訊通知用戶是否有空指針和野指針的操作。 - 一種記憶體檢測方法,應用於電子設備中,該方法包括:
定義步驟,自定義一個動態庫,該自定義的動態庫包括記憶體分配攔截函數與記憶體釋放攔截函數;
第一攔截步驟,當該電子設備中的行程請求分配記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體分配攔截函數,獲取記憶體分配資訊並記錄到操作記錄中;
第二攔截步驟,當該電子設備中的行程請求釋放記憶體時,搜索自定義的動態庫,執行該動態庫中的記憶體釋放攔截函數,獲取記憶體釋放資訊並記錄到該操作記錄中;及
分析步驟,根據操作記錄中記錄的記憶體分配資訊和記憶體釋放資訊,對記憶體的使用情況進行分析。 - 如申請專利範圍第6項所述之記憶體檢測方法,其中所述第一攔截步驟包括:
獲取記憶體分配函數的位址;
從該記憶體分配函數的位址執行記憶體分配函數以分配行程所需的記憶體;及
將分配的記憶體指針、分配的記憶體大小添加到操作記錄中。 - 如申請專利範圍第7項所述之記憶體檢測方法,其中所述第二攔截步驟包括:
獲取記憶體釋放函數的位址,檢查記憶體釋放函數所要釋放的記憶體指針是否為空;
若記憶體釋放函數所要釋放的記憶體指針為空,則在操作記錄中添加釋放空指針的資訊;
若記憶體釋放函數所要釋放的記憶體指針不為空,則在操作記錄中搜索是否有該記憶體指針的資訊;
若在操作記錄中有該記憶體指針的資訊,則從記憶體釋放函數的位址執行記憶體釋放函數以對該記憶體指針對應的記憶體進行釋放,並從操作記錄中抹除該記憶體指針對應的記憶體分配資訊;及
若在操作記錄中不存在該記憶體指針的資訊,則在操作記錄中添加釋放野指針的資訊。 - 如申請專利範圍第8項所述之記憶體檢測方法,其中所述分析步驟包括:
根據操作記錄中記錄的記憶體分配資訊統計已分配的記憶體,並將已分配的記憶體與預先設定的最大記憶體需求量進行比對;
若已分配的記憶體大於等於最大記憶體需求量,則提示用戶記憶體發生洩露;及
若已分配的記憶體小於最大記憶體需求量,則提示用戶記憶體未發生洩露。 - 如申請專利範圍第8項所述之記憶體檢測方法,其中所述分析步驟包括:
從操作記錄中取出記憶體釋放資訊並顯示在該電子設備的顯示設備上,根據記憶體釋放資訊通知用戶是否有空指針和野指針的操作。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201210041033 CN103294588A (zh) | 2012-02-22 | 2012-02-22 | 内存检测系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
TW201335752A true TW201335752A (zh) | 2013-09-01 |
Family
ID=49095507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW101107118A TW201335752A (zh) | 2012-02-22 | 2012-03-02 | 記憶體檢測系統及方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103294588A (zh) |
TW (1) | TW201335752A (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104778087B (zh) * | 2014-01-09 | 2019-04-12 | 中国移动通信集团山东有限公司 | 一种信息处理方法以及信息处理装置 |
CN106610892B (zh) * | 2015-10-23 | 2020-12-22 | 腾讯科技(深圳)有限公司 | 内存泄漏检测方法和装置 |
CN106407031B (zh) * | 2016-09-14 | 2019-05-28 | 华为数字技术(成都)有限公司 | 一种内存泄露定位方法及电子设备 |
CN106484580B (zh) * | 2016-10-21 | 2019-10-18 | 腾讯科技(深圳)有限公司 | 一种内存检测方法、装置及系统 |
CN106648893A (zh) * | 2016-12-20 | 2017-05-10 | 北京匡恩网络科技有限责任公司 | 一种内存管理方法及设备 |
CN107066390B (zh) * | 2017-04-24 | 2020-01-17 | 许继集团有限公司 | 一种动态内存泄漏检测方法及系统 |
CN107423220A (zh) * | 2017-08-04 | 2017-12-01 | 青岛海信宽带多媒体技术有限公司 | 内存泄露的检测方法及装置、电子设备 |
CN107562586A (zh) * | 2017-08-16 | 2018-01-09 | 努比亚技术有限公司 | 一种内存检测方法、设备及计算机存储介质 |
CN107943681A (zh) * | 2017-12-08 | 2018-04-20 | 郑州云海信息技术有限公司 | 内存占用情况分析方法、装置、设备及计算机存储介质 |
CN110413401A (zh) * | 2018-04-28 | 2019-11-05 | 武汉斗鱼网络科技有限公司 | 管理全局对象内存的方法、存储介质、电子设备及系统 |
CN110210220B (zh) * | 2018-07-19 | 2023-03-07 | 腾讯科技(深圳)有限公司 | 一种信息泄露检测方法、装置和存储介质 |
CN111274155B (zh) * | 2020-02-25 | 2021-08-06 | 腾讯科技(深圳)有限公司 | 动态库的内存操作记录方法、装置、设备及存储介质 |
CN112559184A (zh) * | 2020-12-17 | 2021-03-26 | 成都思酷智能科技有限公司 | 一种云桌面动态分配内存的方法及装置 |
-
2012
- 2012-02-22 CN CN 201210041033 patent/CN103294588A/zh active Pending
- 2012-03-02 TW TW101107118A patent/TW201335752A/zh unknown
Also Published As
Publication number | Publication date |
---|---|
CN103294588A (zh) | 2013-09-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TW201335752A (zh) | 記憶體檢測系統及方法 | |
US11429764B2 (en) | System and method for energy usage accounting in software applications | |
US8601469B2 (en) | Method and system for customizing allocation statistics | |
US8522209B2 (en) | Method and system for integrating profiling and debugging | |
US8356286B2 (en) | Method and system for providing on-demand profiling infrastructure for profiling at virtual machines | |
US9529692B2 (en) | Memory management tools | |
US7904493B2 (en) | Method and system for object age detection in garbage collection heaps | |
US8607098B2 (en) | Generating appropriately sized core files used in diagnosing application crashes | |
US8887141B2 (en) | Automatically modifying a native code module accessed from virtual machine bytecode to determine execution information | |
US20210173665A1 (en) | Bootstrapping Profile-Guided Compilation and Verification | |
US20100095280A1 (en) | Method and system for providing loitering trace in virtual machines | |
CN107133144B (zh) | 一种动态监测堆内存使用错误的内存监测装置及方法 | |
JP2014523022A5 (zh) | ||
US11580228B2 (en) | Coverage of web application analysis | |
CN110633190B (zh) | 一种应用程序内存监控方法、装置、设备及存储介质 | |
JP2013033412A (ja) | メモリ管理方法、プログラム及びシステム | |
US10241895B2 (en) | Memory stack trace management tool | |
US10129275B2 (en) | Information processing system and information processing method | |
US9442818B1 (en) | System and method for dynamic data collection | |
US10216620B2 (en) | Static code testing of active code | |
CN110688245A (zh) | 信息获取方法、装置、存储介质及设备 | |
US10528344B2 (en) | Modular points-to analysis | |
US9841960B2 (en) | Dynamic provision of debuggable program code | |
CN114296986B (zh) | 内存泄漏定位方法、装置、介质和电子设备 | |
US9760388B1 (en) | Memory monitoring tool |