新四季網

一種內存管理方法和裝置的製作方法

2023-05-12 03:09:11 1

專利名稱:一種內存管理方法和裝置的製作方法
技術領域:
本發明涉及計算機領域,更具體地,涉及一種內存管理方法和裝置。
背景技術:
Linux作業系統採用物理內存和虛擬內存,物理內存是系統硬體提供的內存大小,是真正的內存,虛擬內存是為了滿足物理內存的不足而提出的策略,它是利用磁碟空間虛擬出的一塊邏輯內存,用作虛擬內存的磁碟空間被稱為交換空間(Swap Space)。內核會將暫時不用的頁面寫到交換空間,這樣使物理內存得到釋放,這塊內存就可以用於其它目的。
交換空間的頁面在使用時會首先被交換到物理內存,如果此時沒有足夠的物理內存來容納這些頁面,它們又會被馬上交換出去,如此可能會出現虛擬內存中沒有足夠空間來存儲這些交換頁面的問題,最終會導致Iinux出現假死機、服務異常等問題。
特別是在Linux中編寫伺服器程序時,經常會向系統大量申請或釋放內存,上述問題會導致申請內存失敗,而且,伺服器程序需要大量內存操作時會用鍊表的形式,內存地址中會記錄下一個數據的地址,根據指針的方式去尋找下一個數據,這樣數據會分配到內存的各個地方,也不便於管理和調試。發明內容
有鑑於此,本發明實施例的目的是提出一種內存管理方法和裝置,能夠有效解決Linux系統內存管理方面存在的缺陷。
為了達到上述目的,本發明實施例提出一種內存管理方法,包括以下步驟:
當程序啟動時,為程序向系統申請預設容量的內存塊;
根據程序中請求的內存大小從所述內存塊中查找可用內存;
輸出查找到的可用內存的地址。
本發明實施例中一次性向系統申請一塊足夠大的內存,在申請的足夠大的內存中管理程序中的申請和釋放內存,既解決了系統內存管理方面存在的缺陷,又能很好掌控程序在內存使用中的具體情況,便於調試程序。
作為上述技術方案的優選,根據程序中請求的內存大小從所述內存塊中查找可用內存的步驟包括:根據程序中請求的內存大小,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。本方案便於重複使用已分配好的內存。
作為上述技術方案的優選,根據程序中請求的內存大小從所述內存塊中查找可用內存的步驟包括:
判斷程序中請求的內存大小的值是否等於預設值;
當程序中請求的內存大小的值不等於預設值時,將程序中請求的內存大小的值增大至等於預設值;
根據增大後的內存大小的值,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。
在本實施例中,將請求的內存大小向上與預設值對齊,便於下次再申請小於預設值大小的內存時能夠快速命中此次申請並釋放後的內存。
作為上述技術方案的優選,判斷程序中請求的內存大小的值是否等於預設值的步驟包括:
判斷程序中請求的小於預設閾值的內存大小的值是否等於2的指數倍;以及
判斷程序中請求的大於預設閾值的內存大小的值是否等於4K的整數倍;
將程序中請求的內存大小的值增大至等於預設值的步驟包括:
將程序中請求的小於預設閾值的內存大小的值增大至等於2的指數倍;以及
將程序中請求的大於預設閾值的內存大小的值增大至等於4K的整數倍。
本方案在請求的內存大小在預設閾值以下時採用指數對齊、在預設閾值以上時以4K為單位線性對齊,既實現了對齊,又不會造成太多的資源浪費。
作為上述技術方案的優選,所述方法還包括步驟:
將程序中釋放的內存回收至所述內存塊中。
採用本方案可以重複使用內存。
作為上述技術方案的優選,所述方法還包括步驟:
定期整理所述內存塊中的內存碎片。
本方案使零碎的內存碎片連接成大塊的內存,以便下次申請大塊內存時能夠成功分配。
本發明實施例還提出一種內存管理裝置,包括:
申請模塊,用於當程序啟動時,為程序向系統申請預設容量的內存塊;
查找模塊,用於根據程序中請求的內存大小從所述內存塊中查找可用內存;
輸出模塊,用於輸出查找到的可用內存的地址。
作為上述技術方案的優選,所述查找模塊用於:根據程序中請求的內存大小,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。
作為上述技術方案的優選,所述查找模塊包括:
判斷單元,用於判斷程序中請求的內存大小的值是否等於預設值;
處理單元,用於當程序中請求的內存大小的值不等於預設值時,將程序中請求的內存大小的值增大至等於預設值;
查找單元,用於根據增大後的內存大小的值,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。
作為上述技術方案的優選,所述判斷單元用於:
判斷程序中請求的小於預設閾值的內存大小的值是否等於2的指數倍;以及
判斷程序中請求的大於預設閾值的內存大小的值是否等於4K的指數倍;
所述處理單元用於:
將程序中請求的小於預設閾值的內存大小的值增大至等於2的指數倍;以及
將程序中請求的大於預設閾值的內存大小的值增大至4K的整數倍。
作為上述技術方案的優選,所述裝置還包括:
回收模塊,用於將程序中釋放的內存回收至所述內存塊中。
作為上述技術方案的優選,所述裝置還包括:
內存碎片整理模塊,用於定期整理所述內存塊中的內存碎片。
本發明實施例的其它特徵和優點將在隨後的說明書中闡述,並且,部分地從說明書中變得顯而易見,或者通過實施本發明實施例而了解。本發明實施例的目的和其他優點可通過在所寫的說明書、權利要求書、以及附圖中所特別指出的結構來實現和獲得。
下面通過附圖和實施例,對本發明實施例的技術方案做進一步的詳細描述。


附圖用來提供對本發明實施例的進一步理解,並且構成說明書的一部分,並不構成對本發明實施例的限制。在附圖中:
圖1是本發明實施例中的內存管理的主要方法流程圖2是本發明實施例中的內存管理的詳細方法流程圖3是本發明實施例中的內存管理裝置的結構示意圖。
具體實施方式
以下結合附圖對優選實施例進行說明,應當理解,此處所描述的優選實施例僅用於說明和解釋本發明實施例,並不用於限定本發明實施例。
如圖1所示為本發明實施例中內存管理的主要方法流程,包括以下步驟:
步驟SlOl:當程序啟動時,為程序向系統申請預設容量的內存塊。
該預設容量應為足夠該程序使用內存塊大小,例如使用Malloc函數向系統申請足夠大的內存塊以供程序使用。
步驟S102:根據程序中請求的內存大小從所述內存塊中查找可用內存。
步驟S103:輸出查找到的可用內存的地址。
本發明實施例中,一次性向系統申請一塊足夠大的內存,然後程序申請和釋放內存都由自己來管理,可以使程序快速的申請和釋放內存。既解決了系統內存管理方面存在的缺陷,又能很好掌控程序在內存使用中的具體情況,便於調試程序。
下面通過兩個典型實施例來詳細介紹實現過程。
如圖2所示為本發明實施例中內存管理的詳細方法流程,包括以下步驟:
步驟S201:當程序啟動時,向系統申請足夠程序使用的內存塊。
步驟S202:將申請的內存塊初始化。
按預設的結構體初始化,該結構體包括內存池指針、長度和表示某段內存是否可用的標記等信息。
步驟S203:獲取程序運行過程中請求的內存大小的值。
步驟S204:判斷程序中請求的內存大小的值是否等於預設值,若是,執行步驟206,若否,執行步驟S205 ;
步驟S205:將請求的內存大小的值向上與預設值對齊。
優選地,將程序中請求的小於預設閾值的內存大小的值增大至等於2的指數倍,即將請求的小於預設閾值的內存大小的值按2的指數向上對齊。預設閾值優選為4K。例如,請求的內存大小為3K時,將其對齊為4K ;請求的內存大小為IK時,將其對齊為2K。
將程序中請求的大於預設閾值的內存大小的值增大至4K的整數倍,將程序中請求的大於預設閾值的內存大小按向上4K對齊,預設閾值優選為4K。例如,請求的內存大小為5Κ、6Κ或7Κ時,將其對齊為8Κ,請求的內存大小為9Κ,將其對齊為12Κ。
步驟S206:在申請的內存塊中查找可用內存。
在本步驟中,優先從內存塊中的已分配並釋放的內存中查找可用內存,若沒有查找到,再從內存塊中未分配的內存中分配可用內存,便於重複使用已分配好的內存。例如,程序剛申請了 5Κ大的內存釋放後(實際分配給程序8Κ內存),再申請6Κ大的內存時,根據對齊後的申請內存的大小的值(對齊後為8Κ),直接查找到剛釋放的8Κ內存,返回相同的內存地址。
從內存塊的結構體中查找表示某段內存是否可用的標記,來判斷內存塊中哪一段是可用的。
步驟S207:將查找到的可用內存的地址返回給程序。
在本實施例中,優先從內存塊中的已分配並釋放的內存中查找可用內存,並且將請求的內存大小向上對齊,便於下次再申請小於預設值大小的內存時能夠快速命中此次申請並釋放後的內存,而無需重新分配。而且,在請求的內存大小在預設閾值以下時採用指數對齊、在預設閾值以上時以4Κ為單位線性對齊,既實現了對齊,又不會造成太多的資源浪費。
在本發明的其他實施例中,程序釋放內存時將釋放的內存回收到申請的內存塊中,將釋放的內存中的結構體中的標記改為可用狀態,下次再申請同樣大的內存時就會被再次使用。
在本發明的其他實施例中,程序運行當中可以定期整理申請的內存塊中因多次申請釋放而產生的內存碎片,使零碎的內存碎片連接成大塊的內存,以便下次申請大塊內存時能夠成功分配。
相應地,本發明實施例還提出一種內存管理裝置,如圖3所示,包括:
申請模塊301,用於當程序啟動時,為程序向系統申請預設容量的內存塊;
查找模塊302,用於根據程序中請求的內存大小從所述內存塊中查找可用內存;
輸出模塊303,用於輸出查找到的可用內存的地址。
優選地,查找模塊302用於:根據程序中請求的內存大小,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。
優選地,查找模塊302包括:
判斷單元,用於判斷程序中請求的內存大小的值是否等於預設值;
處理單元,用於當程序中請求的內存大小的值不等於預設值時,將程序中請求的內存大小的值增大至等於預設值;
查找單元,用於根據增大後的內存大小的值,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。
優選地,判斷單元用於:
判斷程序中請求的小於預設閾值的內存大小的值是否等於2的指數倍;以及
判斷程序中請求的大於預設閾值的內存大小的值是否等於4Κ的指數倍;
所述處理單元用於:
將程序中請求的小於預設閾值的內存大小的值增大至等於2的指數倍;以及
將程序中請求的大於預設閾值的內存大小的值增大至等於4K的整數倍。
作為上述技術方案的優選,所述裝置還包括:
回收模塊,用於將程序中釋放的內存回收至所述內存塊中。
作為上述技術方案的優選,所述裝置還包括:
內存碎片整理模塊,用於定期整理所述內存塊中的內存碎片。
本領域內的技術人員應明白,本發明實施例可提供為方法、系統、或電腦程式產品。因此,本發明實施例可採用完全硬體實現、完全軟體實現、或結合軟體和硬體方面的實現的形式。而且,本發明實施例可採用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限於磁碟存儲器和光學存儲器等)上實施的電腦程式產品的形式。
本發明實施例是參照方法、設備(系統)、和電腦程式產品的流程圖和/或方框圖來描述的。應理解可由電腦程式指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些電腦程式指令到通用計算機、專用計算機、嵌入式處理機或其它可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其它可編程數據處理設備的處理器執行的指令產生用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些電腦程式指令也可存儲在能引導計算機或其它可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的製造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些電腦程式指令也可裝載到計算機或其它可編程數據處理設備上,使得在計算機或其它可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其它可編程設備上執行的指令提供用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
顯然,本領域的技術人員可以對本發明實施例進行各種改動和變型而不脫離本發明實施例的精神和範圍。這樣,倘若本發明實施例的這些修改和變型屬於權利要求及其等同技術的範圍之內,則本發明實施例也意圖包含這些改動和變型在內。
權利要求
1.一種內存管理方法,其特徵在於,包括以下步驟: 當程序啟動時,為程序向系統申請預設容量的內存塊; 根據程序中請求的內存大小從所述內存塊中查找可用內存; 輸出查找到的可用內存的地址。
2.根據權利要求1所述的方法,其特徵在於,根據程序中請求的內存大小從所述內存塊中查找可用內存的步驟包括: 根據程序中請求的內存大小,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。
3.根據權利要求2所述的方法,其特徵在於,根據程序中請求的內存大小從所述內存塊中查找可用內存的步驟包括: 判斷程序中請求的內存大小的值是否等於預設值; 當程序中請求的內存大小的值不等於預設值時,將程序中請求的內存大小的值增大至等於預設值; 根據增大後的內存大小的值,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。
4.根據權利要求3所述的方法,其特徵在於,判斷程序中請求的內存大小的值是否等於預設值的步驟包括: 判斷程序中請求的小於預設閾值的內存大小的值是否等於2的指數倍;以及, 判斷程序中請求的大於預設閾值的內存大小的值是否等於4K的整數倍; 將程序中請求的內存大小的值增大至等於預設值的步驟包括: 將程序中請求的小於預設閾值的內存大小的值增大至等於2的指數倍;以及, 將程序中請求的大於預設閾值的內存大小的值增大至等於4K的整數倍。
5.根據權利要求1所述的方法,其特徵在於,所述方法還包括步驟: 將程序中釋放的內存回收至所述內存塊中。
6.根據權利要求1所述的方法,其特徵在於,所述方法還包括步驟: 定期整理所述內存塊中的內存碎片。
7.—種內存管理裝置,其特徵在於,包括: 申請模塊,用於當程序啟動時,為程序向系統申請預設容量的內存塊; 查找模塊,用於根據程序中請求的內存大小從所述內存塊中查找可用內存; 輸出模塊, 用於輸出查找到的可用內存的地址。
8.根據權利要求7所述的裝置,其特徵在於,所述查找模塊用於:根據程序中請求的內存大小,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。
9.根據權利要求7所述的裝置,其特徵在於,所述查找模塊包括: 判斷單元,用於判斷程序中請求的內存大小的值是否等於預設值; 處理單元,用於當程序中請求的內存大小的值不等於預設值時,將程序中請求的內存大小的值增大至等於預設值; 查找單元,用於根據增大後的內存大小的值,優先從所述內存塊中的已分配並釋放的內存中查找可用內存。
10.根據權利要求9所述的裝置,其特徵在於,所述判斷單元用於:判斷程序中請求的小於預設閾值的內存大小的值是否等於2的指數倍;以及, 判斷程序中請求的大於預設閾值的內存大小的值是否等於4的指數倍; 所述處理單元用於: 將程序中請求的小於預設閾值的內存大小的值增大至等於2的指數倍;以及, 將程序中請求的大於預設閾值的內存大小的值增大至等於4K的整數倍。
11.根據權利要求7所述的裝置,其特徵在於,所述裝置還包括:回收模塊,用於將程序中釋放的內存回收至所述內存塊中。
12.根據權利要求7所述的裝置,其特徵在於,所述裝置還包括:內存碎片整理模塊,用於定期整理所述內 存塊中的內存碎片。
全文摘要
本發明公開了一種內存管理方法和裝置,其中,方法包括以下步驟當程序啟動時,為程序向系統申請預設容量的內存塊;根據程序中請求的內存大小從所述內存塊中查找可用內存;輸出查找到的可用內存的地址。本發明實施例中一次性向系統申請一塊足夠大的內存,在申請的足夠大的內存中管理程序中的申請和釋放內存,既解決了系統內存管理方面存在的缺陷,又能很好掌控程序在內存使用中的具體情況,便於調試程序。
文檔編號G06F12/02GK103150257SQ20131006452
公開日2013年6月12日 申請日期2013年2月28日 優先權日2013年2月28日
發明者羅應龍, 張新亮 申請人:天脈聚源(北京)傳媒科技有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀