[發明專利]基于內存變換的動態內存分配方法及裝置在審
| 申請號: | 202210193860.6 | 申請日: | 2022-03-01 |
| 公開(公告)號: | CN114546661A | 公開(公告)日: | 2022-05-27 |
| 發明(設計)人: | 何水兵;洪佩怡;宋浩哲;黨政;李振鑫 | 申請(專利權)人: | 浙江大學 |
| 主分類號: | G06F9/50 | 分類號: | G06F9/50 |
| 代理公司: | 杭州求是專利事務所有限公司 33200 | 代理人: | 邱啟旺 |
| 地址: | 310058 浙江*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 內存 變換 動態 分配 方法 裝置 | ||
本發明提供了一種基于內存變換的動態內存分配方法,該方法通過修改內存塊未完全分配的內存區域的元數據,使其可以服務于新的內存分配請求大小,包括:記錄未變換時內存區域的內存塊大小、第一個內存塊的起始地址、已分配內存塊數量及內存塊分配情況;根據新的內存分配請求大小,設置并記錄變換后內存區域的內存塊大小、第一個內存塊的起始地址;根據當前變換前后內存塊的對應關系,記錄變換后內存塊中變換前已分配內存塊數量,并記錄當前所有的內存塊分配情況;根據內存釋放情況實時更新當前所有的內存塊分配情況,本發明通過內存變換,使得slab可以根據需要服務于不同大小的內存分配請求,從而減少空閑slab的數量,減少內存碎片,提高內存的利用率。
技術領域
本發明涉及計算機科學內存編程領域,尤其涉及一種基于內存變換的動態內存分配方法及裝置。
背景技術
動態內存分配是指在程序運行過程中根據應用程序的需要對內存空間進行動態地開辟與釋放,幾乎所有的應用程序都不可避免的需要動態內存分配。在進行小內存分配時,內存分配器將一塊內存區域(slab)劃分為特定大小的內存塊((block)),不同slab包含的block大小不同,用以滿足不同的內存分配需求。傳統的內存分配器在slab初始化完成后不會改變其對應的block大小,如果應用程序對某一特定大小的內存申請較少,對應大小的slab只有很少的block被分配,導致該slab既無法被歸還給操作系統也無法用于其它大小的內存分配,造成內存碎片的產生,提高了內存占用量。
發明內容
為了解決靜態slab劃分帶來的內存碎片問題,本發明提出了一種基于內存變換的動態內存分配方法。
本發明采用的技術方案是:
一種基于內存變換的動態內存分配方法,該方法通過修改內存塊未完全分配的內存區域的元數據,使其可以服務于新的內存分配請求大小,具體如下:
記錄未變換時內存區域的內存塊大小、第一個內存塊的起始地址、已分配內存塊數量及內存塊分配情況;
根據新的內存分配請求大小,設置并記錄變換后內存區域的內存塊大小、第一個內存塊的起始地址;
根據當前變換前后內存塊的對應關系,記錄變換后每個內存塊中包含的變換前已分配內存塊數量,并記錄當前所有的內存塊分配情況;
根據內存釋放情況實時更新當前所有的內存塊分配情況,其中,變換后內存塊中包含的變換前已分配內存塊數量為0的內存塊可服務于新的內存分配請求大小。
進一步地,還包括內存區域選取步驟:
采用LRU(Least Recently Used)隊列管理所有的內存區域,為隊列中的內存區域計算內存塊分配比,按順序從LRU隊列中找到第一個分配比低于預設定閾值的內存區域用于內存變換。
進一步地,還包括:
在變換過程中,記錄當前內存區域變換元數據修改已完成的步數。
進一步地,采用索引表記錄未變換時內存區域的內存塊分配情況,采用位圖記錄當前所有的內存塊分配情況。
一種基于內存變換的動態內存分配裝置,包括一個或多個處理器,用于實現上述的基于內存變換的動態內存分配方法。
本發明的有益效果是,通過內存變換,使得slab可以根據需要服務于不同大小的內存分配請求,從而減少空閑slab的數量,減少內存碎片,提高內存的利用率。
附圖說明
圖1表示本發明的內存變換過程。
圖2表示本發明元數據修改過程的一個實例示意圖。
圖3表示本發明與其他現有內存分配器在四類負載下內存占用量的對比。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浙江大學,未經浙江大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202210193860.6/2.html,轉載請聲明來源鉆瓜專利網。





