本發(fā)明涉及內(nèi)存管理,具體涉及一種內(nèi)存管理方法、裝置、計算機設(shè)備及存儲介質(zhì)。
背景技術(shù):
1、計算機的業(yè)務(wù)種類與日俱增,運行各種業(yè)務(wù)的所需要的內(nèi)存大小也不盡相同,隨著內(nèi)存的申請和釋放的操作次數(shù)增加,使得內(nèi)存不斷區(qū)域碎片化,導(dǎo)致有很多空閑內(nèi)存卻無法分配出一塊連續(xù)的內(nèi)存的情況。
2、目前,通常使用內(nèi)存伙伴算法進(jìn)行內(nèi)存管理以盡量避免出現(xiàn)上述內(nèi)存碎片化的情況,該算法通過將所有空閑內(nèi)存塊分為多個塊鏈表,每個鏈表包含特定大小的連續(xù)內(nèi)存塊,從而實現(xiàn)對內(nèi)存的精細(xì)管理。具體而言,當(dāng)申請內(nèi)存時,內(nèi)存伙伴算法將與申請大小相同的內(nèi)存塊鏈表中的空閑頁分配出去并從鏈表中刪除,若不存在相同大小內(nèi)存塊,則檢查上一級,同時將未分配的剩余部分加入下一級空閑鏈表中,內(nèi)存釋放則是申請的逆過程。
3、然而,上述內(nèi)存管理方法,在內(nèi)存申請和釋放的過程中,內(nèi)存的迭代拆分/合并操作以及遍歷鏈表都會產(chǎn)生很大的時間開銷,這不僅影響內(nèi)存申請/釋放的效率和性能,同時,上述方法的內(nèi)存合并操作還存在著需要第一個內(nèi)存塊地址為2的整數(shù)倍的局限性。
技術(shù)實現(xiàn)思路
1、有鑒于此,本發(fā)明提供了一種內(nèi)存管理方法、裝置、計算機設(shè)備及存儲介質(zhì),以解決目前基于伙伴算法的內(nèi)存管理方法效率較低的問題。
2、第一方面,本發(fā)明提供了一種內(nèi)存管理方法,方法包括:
3、根據(jù)物理內(nèi)存信息中各個原子內(nèi)存塊的使用狀態(tài),生成狀態(tài)信息矩陣;狀態(tài)信息矩陣中的各個元素用于分別指示各個原子內(nèi)存塊是否被使用;
4、基于狀態(tài)信息矩陣生成索引表陣列;索引表陣列包括行內(nèi)索引表陣列以及跨行索引表陣列;索引表陣列用于指示不同規(guī)格的內(nèi)存塊的使用情況;不同規(guī)格的內(nèi)存塊用于指示狀態(tài)信息矩陣中不同長度的連續(xù)未被使用的原子內(nèi)存塊;
5、基于索引表陣列,確定與內(nèi)存申請請求對應(yīng)的目標(biāo)內(nèi)存塊;
6、基于目標(biāo)內(nèi)存塊,更新狀態(tài)信息矩陣以及索引表陣列。
7、本發(fā)明實施例提供的內(nèi)存管理方法,對應(yīng)于每個原子內(nèi)存塊的使用狀態(tài)形成狀態(tài)信息矩陣,并基于信息狀態(tài)矩陣生成索引表陣列,索引表陣列的設(shè)計使得能夠快速找到并分配連續(xù)未被使用的內(nèi)存塊,減少內(nèi)存碎片,從而提高整體內(nèi)存利用率,即通過索引表,系統(tǒng)可以快速定位到合適規(guī)格的內(nèi)存塊,而無需遍歷整個內(nèi)存空間,這大大縮短了內(nèi)存分配和回收的時間,提升了系統(tǒng)性能。
8、在一種可選的實施方式中,基于狀態(tài)信息矩陣生成索引表陣列,包括:
9、基于狀態(tài)信息矩陣生成行內(nèi)索引表陣列和跨行索引表陣列;行內(nèi)索引表陣列和跨行索引表陣列的列數(shù)均為內(nèi)存塊規(guī)格數(shù),行內(nèi)索引表陣列的行數(shù)與狀態(tài)信息矩陣的行數(shù)相等,跨行索引表陣列的行數(shù)比行內(nèi)索引表陣列的行數(shù)少1。
10、本發(fā)明實施例提供的內(nèi)存管理方法,通過將狀態(tài)信息矩陣轉(zhuǎn)化為索引表陣列,包括行內(nèi)索引表陣列和跨行索引表陣列,可以快速定位到合適規(guī)格的內(nèi)存塊,索引表陣列不僅記錄了內(nèi)存塊的使用情況,還根據(jù)內(nèi)存塊的規(guī)格進(jìn)行了分類,從而減少了在整個狀態(tài)信息矩陣中搜索未使用內(nèi)存塊的時間。這種索引方式加速了內(nèi)存分配過程,提高了系統(tǒng)的響應(yīng)速度和整體性能。同時,通過將復(fù)雜的內(nèi)存狀態(tài)信息簡化為結(jié)構(gòu)化的索引表陣列,也使得內(nèi)存管理的邏輯更加清晰和易于維護(hù)。
11、在一種可選的實施方式中,基于索引表陣列,確定與內(nèi)存申請請求對應(yīng)的目標(biāo)內(nèi)存塊,包括:
12、基于內(nèi)存申請請求,在索引表陣列中確定狀態(tài)信息矩陣中的目標(biāo)區(qū)域;
13、在目標(biāo)區(qū)域中選取與內(nèi)存申請請求對應(yīng)大小的目標(biāo)內(nèi)存塊。
14、本發(fā)明實施例提供的內(nèi)存管理方法,通過設(shè)置行內(nèi)索引表陣列和跨行索引表陣列,能夠快速定位到狀態(tài)信息矩陣中可能包含滿足請求大小的連續(xù)未被使用的內(nèi)存塊,即目標(biāo)內(nèi)存塊的區(qū)域。這種快速定位機制避免了在整個物理內(nèi)存空間中進(jìn)行無目的或線性的搜索,從而顯著提高了內(nèi)存分配的效率。
15、在一種可選的實施方式中,基于內(nèi)存申請請求,在索引表陣列中確定狀態(tài)信息矩陣中的目標(biāo)區(qū)域,包括:
16、若索引表陣列中存在與內(nèi)存申請請求大小相同的空閑狀態(tài)內(nèi)存塊,則將空閑狀態(tài)內(nèi)存塊對應(yīng)的狀態(tài)信息矩陣中的區(qū)域確認(rèn)為目標(biāo)區(qū)域;
17、若索引表陣列中不存在與內(nèi)存申請請求大小相同的空閑狀態(tài)內(nèi)存塊,則將大于內(nèi)存申請請求的最小規(guī)格的空閑狀態(tài)內(nèi)存塊對應(yīng)的狀態(tài)信息矩陣中的區(qū)域確認(rèn)為目標(biāo)區(qū)域。
18、本發(fā)明實施例提供的內(nèi)存管理方法,通過首先檢查索引表陣列中是否存在與內(nèi)存申請請求大小完全相同的空閑內(nèi)存塊,如果存在,則直接確定目標(biāo)區(qū)域進(jìn)行該內(nèi)存塊的分配,這樣可以最大化地滿足內(nèi)存請求的需求,同時減少內(nèi)存碎片的產(chǎn)生。如果不存在完全匹配的內(nèi)存塊,則選擇大于請求大小的最小規(guī)格的內(nèi)存塊以確定目標(biāo)區(qū)域,這種策略確保了內(nèi)存的有效利用,避免了不必要的內(nèi)存浪費。
19、在一種可選的實施方式中,在目標(biāo)區(qū)域中選取與內(nèi)存申請請求對應(yīng)大小的目標(biāo)內(nèi)存塊,包括:
20、選取目標(biāo)區(qū)域中地址最小的與內(nèi)存申請請求對應(yīng)大小的目標(biāo)內(nèi)存塊。
21、本發(fā)明實施例提供的內(nèi)存管理方法,選擇地址最小的內(nèi)存塊進(jìn)行分配,有助于保持內(nèi)存空間的連續(xù)性,同時,選擇地址最小的內(nèi)存塊進(jìn)行分配,可以簡化內(nèi)存管理的復(fù)雜性。
22、在一種可選的實施方式中,方法還包括:
23、若內(nèi)存申請請求成功,向業(yè)務(wù)層應(yīng)答內(nèi)存申請成功信息及目標(biāo)內(nèi)存塊的地址,反之則向業(yè)務(wù)層應(yīng)答內(nèi)存申請失敗信息。
24、本發(fā)明實施例提供的內(nèi)存管理方法,通過向業(yè)務(wù)層應(yīng)答內(nèi)存申請的成功或失敗信息,業(yè)務(wù)層能夠即時地知道內(nèi)存請求的處理結(jié)果。如果內(nèi)存申請成功,業(yè)務(wù)層可以獲得目標(biāo)內(nèi)存塊的地址,并繼續(xù)執(zhí)行后續(xù)操作;如果內(nèi)存申請失敗,業(yè)務(wù)層可以及時采取補救措施,如釋放部分不再需要的內(nèi)存、嘗試較小的內(nèi)存請求或通知用戶內(nèi)存資源不足。這種即時的反饋有助于增強程序的穩(wěn)定性和用戶體驗。
25、在一種可選的實施方式中,方法還包括:
26、響應(yīng)于內(nèi)存釋放請求,更新狀態(tài)信息矩陣以及索引表陣列。
27、本發(fā)明實施例提供的內(nèi)存管理方法,當(dāng)內(nèi)存塊被釋放時,及時更新狀態(tài)信息矩陣和索引表陣列,可以確保這些內(nèi)存塊被正確地標(biāo)記為空閑狀態(tài),并在后續(xù)的內(nèi)存分配請求中被重新利用。這有助于提高內(nèi)存資源的再利用率,減少內(nèi)存浪費。
28、在一種可選的實施方式中,方法還包括:
29、若內(nèi)存釋放請求成功,向業(yè)務(wù)層應(yīng)答內(nèi)存釋放成功信息,反之則向業(yè)務(wù)層應(yīng)答內(nèi)存釋放失敗信息。
30、本發(fā)明實施例提供的內(nèi)存管理方法,當(dāng)業(yè)務(wù)層收到內(nèi)存釋放成功的應(yīng)答時,它可以更快地釋放相關(guān)資源,如果內(nèi)存釋放失敗,業(yè)務(wù)層可以采取相應(yīng)的補救措施,如重試釋放操作、記錄錯誤日志或通知用戶,助于增強程序的穩(wěn)定性和用戶體驗。
31、第二方面,本發(fā)明提供了一種內(nèi)存管理裝置,裝置包括:
32、生成矩陣模塊,用于根據(jù)物理內(nèi)存信息中各個原子內(nèi)存塊的使用狀態(tài),生成狀態(tài)信息矩陣;狀態(tài)信息矩陣中的各個元素用于分別指示各個原子內(nèi)存塊是否被使用;
33、生成陣列模塊,用于基于狀態(tài)信息矩陣生成索引表陣列;索引表陣列包括行內(nèi)索引表陣列以及跨行索引表陣列;索引表陣列用于指示不同規(guī)格的內(nèi)存塊的使用情況;不同規(guī)格的內(nèi)存塊用于指示狀態(tài)信息矩陣中不同長度的連續(xù)未被使用的原子內(nèi)存塊;
34、確定模塊,用于基于索引表陣列,確定與內(nèi)存申請請求對應(yīng)的目標(biāo)內(nèi)存塊;
35、更新模塊,用于基于目標(biāo)內(nèi)存塊,更新狀態(tài)信息矩陣以及索引表陣列。
36、第三方面,本發(fā)明提供了一種計算機設(shè)備,包括:存儲器和處理器,存儲器和處理器之間互相通信連接,存儲器中存儲有計算機指令,處理器通過執(zhí)行計算機指令,從而執(zhí)行上述第一方面或其對應(yīng)的任一實施方式的內(nèi)存管理方法。
37、第四方面,本發(fā)明提供了一種計算機可讀存儲介質(zhì),該計算機可讀存儲介質(zhì)上存儲有計算機指令,計算機指令用于使計算機執(zhí)行上述第一方面或其對應(yīng)的任一實施方式的內(nèi)存管理方法。
38、第五方面,本發(fā)明提供了一種計算機程序產(chǎn)品,包括計算機指令,計算機指令用于使計算機執(zhí)行上述第一方面或其對應(yīng)的任一實施方式的內(nèi)存管理方法。