[發明專利]一種用于linux環境中的內存池調試方法在審
| 申請號: | 201710617729.7 | 申請日: | 2017-07-26 |
| 公開(公告)號: | CN107451054A | 公開(公告)日: | 2017-12-08 |
| 發明(設計)人: | 王鑫鵬;倪創;陶琴;陳輝 | 申請(專利權)人: | 武漢虹信通信技術有限責任公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F12/02 |
| 代理公司: | 武漢科皓知識產權代理事務所(特殊普通合伙)42222 | 代理人: | 嚴彥 |
| 地址: | 430073 湖北省*** | 國省代碼: | 湖北;42 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 用于 linux 環境 中的 內存 調試 方法 | ||
1.一種用于linux環境中的內存池調試方法,其特征在于:用內存池來管理動態申請的內存,在內存塊的管理結構中存儲debug信息,實現方式如下,
在程序啟動時,將進程的虛擬地址映射表輸出到一個文件里保存,用于函數調用棧地址和代碼位置的轉換;
之后創建和初始化內存池,內存池里的內存按業務需求分成不同大小的內存塊,每個內存塊都有一個管理結構用于內存池對內存塊進行管理,管理結構對用戶不可見;內存塊的管理結構內有鏈表結構,用于將同類型的同狀態內存塊連接起來,大小相同的狀態相同的內存塊在一個鏈表中;
申請內存時,從內存池中取相應大小的內存塊返回給用戶,并在內存塊的管理結構中存儲申請時的函數調用棧地址;釋放內存時,將要釋放的內存塊返回給內存池,并在內存塊的管理結構中存儲釋放時的函數調用棧地址;
出現問題時,將存儲的函數調用棧地址轉換成代碼位置,支持直接定位bug出現的代碼位置。
2.根據權利要求1所述用于linux環境中的內存池調試方法,其特征在于:內存塊的管理結構內有標記表明此內存塊是inuse或free的狀態,如果對一個free的內存塊進行釋放操作,就是double free狀態;inuse表示被申請狀態,free表示空閑未被申請的狀態,double free表示重復釋放狀態。
3.根據權利要求1所述用于linux環境中的內存池調試方法,其特征在于:申請內存時是從對應大小的空閑內存塊鏈表free list里取一個內存塊返回給用戶使用,同時放置到對應大小的被分配內存塊鏈表inuse list中。
4.根據權利要求1所述用于linux環境中的內存池調試方法,其特征在于:內存池里的內存塊被創建出來后,不能被銷毀,內存的申請和釋放只是將內存塊在內存池的不同鏈表間轉換,支持保留內存塊管理結構內存儲的debug信息。
5.根據權利要求1所述用于linux環境中的內存池調試方法,其特征在于:在啟動時存儲進程的虛擬地址映射表,在申請和釋放內存時都獲取函數棧地址存儲到內存塊的管理結構中。
6.根據權利要求1或2或3或4或5所述用于linux環境中的內存池調試方法,其特征在于:記錄函數調用棧地址是調用__builtin_return_address(n),此調用返回一個int的整數,作為棧地址存儲到內存塊的管理結構中;其中n表示棧的層數,調用__builtin_return_address(n)表示返回第n層的棧地址。
7.根據權利要求1或2或3或4或5所述用于linux環境中的內存池調試方法,其特征在于:將函數調用棧地址還原為代碼位置是使用linux的工具addr2line和之前記錄的虛擬地址映射表。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于武漢虹信通信技術有限責任公司,未經武漢虹信通信技術有限責任公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710617729.7/1.html,轉載請聲明來源鉆瓜專利網。





