欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種避免內(nèi)存碎片化的內(nèi)存分配方法

文檔序號:6560222閱讀:329來源:國知局
專利名稱:一種避免內(nèi)存碎片化的內(nèi)存分配方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種軟件開發(fā)中使用的避免內(nèi)存碎片化的內(nèi)存分配方法, 屬于內(nèi)存管理技術(shù)領(lǐng)域。
背景技術(shù)
在一個電信通訊系統(tǒng)中,系統(tǒng)能否穩(wěn)定可靠的運(yùn)行直接影響到業(yè)務(wù)的 準(zhǔn)確性和實(shí)時性。系統(tǒng)在運(yùn)行中需要頻繁的申請和釋放內(nèi)存,在長期的運(yùn)行過程中系統(tǒng) 會產(chǎn)生大量的內(nèi)存碎片,這個問題嚴(yán)重的影響了系統(tǒng)的穩(wěn)定運(yùn)行。對于內(nèi) 存碎片化問題,現(xiàn)有的各種系統(tǒng)都有自己的內(nèi)存管理機(jī)制。該內(nèi)存管理機(jī) 制 一般的方法是根據(jù)操作系統(tǒng)所能提供內(nèi)存的大小預(yù)先把系統(tǒng)的內(nèi)存劃 分為大小不同的內(nèi)存池,再將每一個內(nèi)存池中的內(nèi)存劃分為固定大小一致的內(nèi)存快。 一般情況下,內(nèi)存池的大小是2的冪字節(jié)數(shù)。并且一個內(nèi)存池 的大小是他左邊鄰居大小的2倍。由于內(nèi)存池的個數(shù),每個內(nèi)存池中內(nèi) 存塊的大小和個數(shù)等參數(shù)是在系統(tǒng)初始化時確定的,并且在系統(tǒng)運(yùn)行過程 中不再改變。為了高效的利用內(nèi)存,必須事先統(tǒng)計(jì)各種不同內(nèi)存的使用情況?,F(xiàn)有內(nèi)存分配機(jī)制的缺陷在于每種內(nèi)存池的數(shù)目和每種內(nèi)存塊的數(shù) 目是在系統(tǒng)剛開始運(yùn)行時就已經(jīng)確定下來的。如果在系統(tǒng)允許過程中某種 大小的內(nèi)存塊使用申請完畢,這時或者是因?yàn)樯暾埐坏絻?nèi)存而形成系統(tǒng)異 常,或者從較大的內(nèi)存池中分配一塊內(nèi)存給申請者,這樣造成了內(nèi)存資源 的浪費(fèi)。如果需要申請的內(nèi)存超過了所能提供的最大的內(nèi)存塊的大小,系 統(tǒng)會因?yàn)樯暾埐坏絻?nèi)存而產(chǎn)生異常情況。對于傳統(tǒng)的內(nèi)存分配方法,每種內(nèi)存池中內(nèi)存塊的多少采用動態(tài)控制
的方法。系統(tǒng)初始化時首先申請一定量的內(nèi)存塊,在系統(tǒng)運(yùn)行過程中,當(dāng) 某種大小的內(nèi)存塊消耗完后,向操作系統(tǒng)動態(tài)的申請,并置上已經(jīng)使用的 標(biāo)記。當(dāng)申請的內(nèi)存的大小超過了當(dāng)前所分配的最大的內(nèi)存塊的大小時, 直接向搡作系統(tǒng)動態(tài)的申請,使用完后,把內(nèi)存釋放給操作系統(tǒng)。這種內(nèi) 存管理的方法雖然解決了內(nèi)存資源的浪費(fèi)的問題但是并不能解決內(nèi)存碎 片的問題,在一個需要頻繁申請和釋放內(nèi)存的系統(tǒng)中,當(dāng)頻繁申請的內(nèi)存 塊的大小超過了已經(jīng)分配的內(nèi)存池中最大內(nèi)存塊大小的時候,需要頻繁的 向操作系統(tǒng)申請內(nèi)存。運(yùn)行一段時間后系統(tǒng)中同樣會出現(xiàn)大量的內(nèi)存碎 片。所以這種方法也不能很好的解決內(nèi)存碎片和減少內(nèi)存資源浪費(fèi)之間的 相互問題。發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題在于提供一種避免內(nèi)存碎片化的內(nèi)存分 配方法,以很好的解決內(nèi)存碎片和減少內(nèi)存資源的浪費(fèi)之間的問題。為了解決上述問題,本發(fā)明提供了 一種避免內(nèi)存碎片化的內(nèi)存分配方法,其包括如下步驟(1)創(chuàng)建至少一個普通內(nèi)存池,為每一個普通內(nèi)存池向操作系統(tǒng)申 請一定數(shù)量的內(nèi)存塊,所述每一個內(nèi)存塊由一個以上的大小相同的內(nèi)存存 儲塊組成;(2 )創(chuàng)建一個大內(nèi)存池,由操作系統(tǒng)中可提供申請的剩余內(nèi)存組成, 并在其中創(chuàng)建兩個隊(duì)列, 一個是已分配內(nèi)存隊(duì)列,記錄大內(nèi)存池中已經(jīng)分 配的內(nèi)存塊的情況,另一個是未分配內(nèi)存隊(duì)列,記錄大內(nèi)存池中未分配內(nèi) 存的信息;(3)當(dāng)應(yīng)用申請內(nèi)存時,判斷當(dāng)前申請的內(nèi)存大小是否在普通內(nèi)存 池所能提供的內(nèi)存塊大小范圍內(nèi),如果是,則在普通內(nèi)存池中分配相應(yīng)大 小的空閑內(nèi)存存儲塊給該應(yīng)用,并將已經(jīng)分配的內(nèi)存存儲塊標(biāo)記為已經(jīng)占 用;如果否,則查詢所述未分配內(nèi)存隊(duì)列的記錄,從大內(nèi)存池中分配相應(yīng) 大小的內(nèi)存塊給該應(yīng)用,并將該已分配信息記錄入所述已分配內(nèi)存隊(duì)列; (4)當(dāng)應(yīng)用釋放內(nèi)存時,判斷當(dāng)前欲釋放的內(nèi)存塊是從普通內(nèi)存池, 還是從大內(nèi)存池中申請得到的,如果是從普通內(nèi)存池中申請得到的,則取消對應(yīng)內(nèi)存存儲塊的占用標(biāo)記;如果是從大內(nèi)存池中分配得到的,則在未分配內(nèi)存隊(duì)列中查詢該當(dāng)前欲釋放的內(nèi)存塊的前后相鄰內(nèi)存是否是未分 為一個空閑的內(nèi)存塊,同時修改所述已分配內(nèi)存隊(duì)列的信息。進(jìn)一步地,本發(fā)明所述的方法,其所述步驟(2)中,所述兩個隊(duì)列 在初始創(chuàng)建時,所述已分配內(nèi)存隊(duì)列為空,所述未分配內(nèi)存隊(duì)列中只有一 個節(jié)點(diǎn),記錄整個大內(nèi)存池的內(nèi)存情況。進(jìn)一步地,本發(fā)明所述的方法,其所述步驟(3)中,所述判斷當(dāng)前 申請的內(nèi)存大小是否在普通內(nèi)存池所能提供的內(nèi)存塊大小范圍內(nèi)的步驟, 是判斷該內(nèi)存存儲塊的大小與當(dāng)前申請的內(nèi)存大小相匹配的普通內(nèi)存池 中是否存在相應(yīng)的空閑內(nèi)存存儲塊;當(dāng)判斷到當(dāng)前申請的內(nèi)存大小未在普通內(nèi)存池所能提供的內(nèi)存塊大 小范圍內(nèi)時,進(jìn)一步包括判斷當(dāng)前申請內(nèi)存的大小是否大于所述大內(nèi)存 池所能提供內(nèi)存的最大申請大小,如果是,則拒絕該申請;如果當(dāng)前申請 的內(nèi)存大小不超過大內(nèi)存池所能提供內(nèi)存申請的最大申請大小,則從所述 未分配內(nèi)存的隊(duì)列中查找一個適用的內(nèi)存塊,并判斷該找到的內(nèi)存塊的大 小是否不小于普通內(nèi)存池中最大的內(nèi)存存儲塊的大小和當(dāng)前申請內(nèi)存大 小之和,如果是,則從該內(nèi)存塊中分割出一個與當(dāng)前申請內(nèi)存塊大小匹配 的內(nèi)存塊并分配給所述應(yīng)用,并將分割后剩余的內(nèi)存信息更新到未分配內(nèi) 存隊(duì)列中;如果否,則將該找到的內(nèi)存塊完全分配給所述應(yīng)用,并根據(jù)分 配情況更新未分配內(nèi)存隊(duì)列與已分配內(nèi)存隊(duì)列中的信息。本發(fā)明所述的方法,進(jìn)一步包括所述為普通內(nèi)存池申請的內(nèi)存塊的 大小不同。應(yīng)用本發(fā)明所述的方法,通過內(nèi)存分配管理模塊,使內(nèi)存申請者隨時 都可以申請到合適大小的內(nèi)存塊;在某種大小的內(nèi)存存儲塊消耗完后,可 以到大內(nèi)存池中去申請,解決了申請不到內(nèi)存而產(chǎn)生系統(tǒng)異常的問題;當(dāng)
申請大塊內(nèi)存時,內(nèi)存分配管理模塊可以在大的內(nèi)存池中直接的分配,解 決了傳統(tǒng)方法的內(nèi)存浪費(fèi)以及內(nèi)存碎片的問題。


圖l是本發(fā)明所述的基本內(nèi)存池示意圖; 圖2是本發(fā)明所述的大內(nèi)存池示意圖;示意圖;圖4是本發(fā)明實(shí)施例所述的應(yīng)用申請內(nèi)存的流程圖;圖5是本發(fā)明實(shí)施例所述的應(yīng)用釋放內(nèi)存的流程圖;圖6是本發(fā)明實(shí)施例所述的基本內(nèi)存池示意圖;圖7是本發(fā)明實(shí)施例所述的大內(nèi)存池示意圖;圖8是本發(fā)明實(shí)施例所述的大內(nèi)存池管理隊(duì)列變化示意圖。
具體實(shí)施例方式
為了使本發(fā)明所述的技術(shù)特點(diǎn)和方案的更加的清楚明白,通過下面具 體的使用的實(shí)施例來進(jìn)一步的說明。如附圖l所示,為本發(fā)明所述的內(nèi)存管理示意圖,內(nèi)存分配管理模塊 設(shè)置一定數(shù)量的基本內(nèi)存池(Base POOL) 101, —般創(chuàng)建普通內(nèi)存池101 的數(shù)量與系統(tǒng)的CPU數(shù)量一致,每個基本內(nèi)存池又劃分成一定數(shù)量的內(nèi) 存存儲塊隊(duì)列(chunk list) 102,為每個內(nèi)存存儲塊隊(duì)列向操作系統(tǒng)申請 一定數(shù)量的大小相同的內(nèi)存存儲塊。在同一個基本內(nèi)存池中,不同的內(nèi)存 存儲塊隊(duì)列中的內(nèi)存存儲塊的大小不同。
如附圖2所示,當(dāng)基本內(nèi)存池需要的內(nèi)存申請完成后,剩下的系統(tǒng)可 提供申請的內(nèi)存都申請為大內(nèi)存池(Large pool Memory) 103所使用,一 般創(chuàng)建大內(nèi)存池103的大小不超過系統(tǒng)可申請內(nèi)存的50% ,大內(nèi)存池103 的大'J、一般占系統(tǒng)可申請內(nèi)存的10%至20%。首先從大內(nèi)存池103中分 配一定數(shù)量的內(nèi)存,如附圖3所示,創(chuàng)建已分配內(nèi)存隊(duì)列104和未分配內(nèi) 存隊(duì)列105,并初始化這兩個隊(duì)列。初始時,已分配內(nèi)存節(jié)點(diǎn)隊(duì)列104為 空,未分配內(nèi)存節(jié)點(diǎn)隊(duì)列105只有一個節(jié)點(diǎn)(NODE),在這個節(jié)點(diǎn)中存 儲當(dāng)前大內(nèi)存池中的未分配內(nèi)存信息。如附圖4所示,步驟106在內(nèi)存申請者申請內(nèi)存時,內(nèi)存分配管理模 塊按照下面的流程來執(zhí)行步驟107、內(nèi)存分配管理模塊首先判斷申請的內(nèi)存大小是否超過了基 本內(nèi)存池所能提供的內(nèi)存的內(nèi)存存儲塊的大小,如果不是,執(zhí)行步驟108; 否則執(zhí)行步驟109。步驟108、找到一個合適的基本內(nèi)存池,查找是否有合適的內(nèi)存存儲 塊可提供分配,如果有,執(zhí)行步驟110取得一個大小相宜的內(nèi)存存儲塊分 配給內(nèi)存申請者,并置這個內(nèi)存存儲塊為已經(jīng)占用,返回;如果基本內(nèi)存 池中沒有合適的內(nèi)存存儲塊可以提供分配,那么就執(zhí)行步驟109,到大內(nèi) 存池中去申請。步驟109、內(nèi)存分配管理模塊判斷內(nèi)存申請者申請的內(nèi)存大小是否大 于大內(nèi)存池所能提供內(nèi)存申請的的最大值,如果是,執(zhí)行步驟lll申請內(nèi) 存失敗返回錯誤;否則執(zhí)行步驟112大內(nèi)存池內(nèi)存申請分配流程,首先查 找大內(nèi)存池未分配內(nèi)存隊(duì)列,從中查找一個大小合適的內(nèi)存塊,判斷這個 內(nèi)存塊的大小是否大于等于普通內(nèi)存池中最大的內(nèi)存存儲塊的大小和申 請內(nèi)存大小之和,如果是,執(zhí)行步驟113則分割這個內(nèi)存塊為兩部分,一 部分提供給內(nèi)存申請者使用,剩余那部分內(nèi)存塊仍然為未使用狀態(tài),把當(dāng) 前分配給使用者的內(nèi)存塊信息加入到已分配內(nèi)存信息隊(duì)列中,并把分割后 剩余的內(nèi)存塊信息更新到原來的節(jié)點(diǎn)信息中去;否則,執(zhí)行步驟114不進(jìn) 行分割,把內(nèi)存分配給內(nèi)存申請者,把當(dāng)前分配給使用者的內(nèi)存塊信息加 入到已分配內(nèi)存信息隊(duì)列中。步驟115,當(dāng)內(nèi)存申請者釋放使用的內(nèi)存時,內(nèi)存分配管理模塊按照 下面的流程來處理步驟116、內(nèi)存分配管理模塊判斷該內(nèi)存塊是從大內(nèi)存池中申請得到 的,還是從普通內(nèi)存池中申請得到的,如果是從普通內(nèi)存池中申請得到的,執(zhí)行步驟117,否則執(zhí)行步驟118。步驟in、如果是從基本內(nèi)存池ioi中申請得到的時,取消內(nèi)存存儲 塊的占用標(biāo)i己,返回。步驟118、如果是從大內(nèi)存池中分配得到的,那么從大內(nèi)存池的已分 配內(nèi)存隊(duì)列中刪除該內(nèi)存塊的占用標(biāo)記,執(zhí)行步驟119查找未分配內(nèi)存隊(duì) 列,察看該內(nèi)存塊的前后相鄰內(nèi)存塊是否有未分配狀態(tài)的空閑內(nèi)存塊,如 果有未分配狀態(tài)的內(nèi)存塊,執(zhí)行步驟120那么將它們合并為一個空閑的大 的內(nèi)存塊,相應(yīng)未分配內(nèi)存信息隊(duì)列也要進(jìn)行相應(yīng)節(jié)點(diǎn)的合并處理;如果 該內(nèi)存塊的前后相鄰內(nèi)存塊都為占用狀態(tài),執(zhí)行步驟121那么向未分配內(nèi) 存信息隊(duì)列加入當(dāng)前釋^t內(nèi)存塊的相應(yīng)信息。如圖6和圖7所示,為本發(fā)明的實(shí)施例的內(nèi)存管理示意圖。在這個例 子中假設(shè)只有一個基本內(nèi)存池(Base POOL) 201和大內(nèi)存池202。在基 本內(nèi)存池201中,內(nèi)存存儲塊的大小字符上有方框的內(nèi)存存儲塊表示已經(jīng) 被占用了。如果現(xiàn)在有一個內(nèi)存申請者申請7K內(nèi)存,則內(nèi)存管理模塊根 據(jù)申請內(nèi)存存儲塊的大小,定位到大小為8K的內(nèi)存存儲塊隊(duì)列,并判斷 是否有空閑的內(nèi)存存儲塊,如果有空閑的內(nèi)存塊,那么就分配一個8K的 內(nèi)存存儲塊給調(diào)用者,并設(shè)置這個內(nèi)存存儲塊為占用。如果8K的內(nèi)存存 儲塊隊(duì)列中沒有未使用的內(nèi)存存儲塊,那么內(nèi)存管理模塊就到大內(nèi)存池 202中為調(diào)用者申請內(nèi)存。當(dāng)調(diào)用者釋放從基本內(nèi)存池中申請的內(nèi)存存儲 塊時,取消該內(nèi)存存儲塊的占用標(biāo)記。如圖8所示,為本發(fā)明實(shí)施例所述的大內(nèi)存池管理隊(duì)列變化示意圖。 描述了在大池中申請和釋放內(nèi)存塊時,已分配內(nèi)存信息隊(duì)列和未分配內(nèi)存 信息隊(duì)列的變化情況的一個例子。大池的大小為10000K,調(diào)用者先后申 請內(nèi)存的大小為20k,15K 300K ,接著調(diào)用者順序釋i文了內(nèi)存大小為 15K,300K的內(nèi)存塊。步驟A到步驟E描述了已分配內(nèi)存信息隊(duì)列和未分 配內(nèi)存信息隊(duì)列的變化情況。在圖8中,步驟301中描述了調(diào)用者在大池中申請了 20K內(nèi)存后,
已分配內(nèi)存信息隊(duì)列和未分配內(nèi)存信息隊(duì)列的變化情況。已分配內(nèi)存信息隊(duì)列中第一個節(jié)點(diǎn)中紀(jì)錄了分配的20K的信息如該內(nèi)存塊的位置、大小等各種情況;未分配內(nèi)存信息隊(duì)列中記錄了當(dāng)前的未分配內(nèi)存的相關(guān)信 自步驟302中描述了內(nèi)存管理模塊從大池中又分配了 15K內(nèi)存后的情 況,已分配內(nèi)存信息隊(duì)列包括2個有效的信息節(jié)點(diǎn),記錄了20K和15K 兩個已分配內(nèi)存塊的信息,未分配內(nèi)存信息隊(duì)列中包含一個大的未分配內(nèi) 存塊信息。步驟303中描述了內(nèi)存管理模塊從大池中分配了 300K內(nèi)存后的情 況,已分配內(nèi)存信息隊(duì)列包括3個已經(jīng)分配給調(diào)用者使用的內(nèi)存塊的信 息,未分配內(nèi)存信息隊(duì)列中包含剩余的一個大的未分配內(nèi)存塊信息。步驟304中描述了調(diào)用者釋放了從大內(nèi)存池中申請的大小為15K的 內(nèi)存塊后已分配內(nèi)存信息隊(duì)列和未分配內(nèi)存信息隊(duì)列的變化情況。這時由 于這個15K內(nèi)存塊的前后的內(nèi)存塊都為已使用狀態(tài),所以沒有內(nèi)存塊合 并的過程,從已分配內(nèi)存信息隊(duì)列中去除這個15K內(nèi)存塊的信息,并加 入到未分配內(nèi)存信息隊(duì)列中去。在步驟305中描述了調(diào)用者釋放了從大內(nèi)存池中申請的大小為300K 的內(nèi)存塊后已分配內(nèi)存信息隊(duì)列和未分配內(nèi)存信息隊(duì)列的變化情況。這時 由于這個300K內(nèi)存塊的前后的內(nèi)存塊都為未使用狀態(tài),所以這里需要進(jìn) 行內(nèi)存塊合并的過程,合并完成后大內(nèi)存池中只有一^^一個已經(jīng)分配的內(nèi) 存塊和一個未分配的內(nèi)存塊。以上實(shí)施例中的描述僅為本發(fā)明的較佳的實(shí)施例而已,并不是用來限 制本發(fā)明,凡是在本發(fā)明所述方法的思想和原則之內(nèi),所做的任何的修改, 等同的替換以及改進(jìn)等,都應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1、 一種避免內(nèi)存碎片化的內(nèi)存分配方法,其特征在于,包括如下步驟(1)創(chuàng)建至少一個普通內(nèi)存池,為每一個普通內(nèi)存池向操作系統(tǒng)申 請一定數(shù)量的內(nèi)存塊,所述每一個內(nèi)存塊由一個以上的大小相同的內(nèi)存存 儲塊組成;(2 )創(chuàng)建 一 個大內(nèi)存池,由操作系統(tǒng)中可提供申請的剩余內(nèi)存組成, 并在其中創(chuàng)建兩個隊(duì)列, 一個是已分配內(nèi)存隊(duì)列,記錄大內(nèi)存池中已經(jīng)分 配的內(nèi)存塊的情況,另一個是未分配內(nèi)存隊(duì)列,記錄大內(nèi)存池中未分配內(nèi) 存的信息;(3) 當(dāng)應(yīng)用申請內(nèi)存時,判斷當(dāng)前申請的內(nèi)存大小是否在普通內(nèi)存 池所能提供的內(nèi)存塊大小范圍內(nèi),如果是,則在普通內(nèi)存池中分配相應(yīng)大 小的空閑內(nèi)存存儲塊給該應(yīng)用,并將已經(jīng)分配的內(nèi)存存儲塊標(biāo)記為已經(jīng)占 用;如果否,則查詢所述未分配內(nèi)存隊(duì)列的記錄,從大內(nèi)存池中分配相應(yīng) 大小的內(nèi)存塊給該應(yīng)用,并將該已分配信息記錄入所述已分配內(nèi)存隊(duì)列;(4) 當(dāng)應(yīng)用釋放內(nèi)存時,判斷當(dāng)前欲釋放的內(nèi)存塊是從普通內(nèi)存池, 還是從大內(nèi)存池中申請得到的,如果是從普通內(nèi)存池中申請得到的,則取 消對應(yīng)內(nèi)存存儲塊的占用標(biāo)記;如果是從大內(nèi)存池中分配得到的,則在未 分配內(nèi)存隊(duì)列中查詢該當(dāng)前欲釋放的內(nèi)存塊的前后相鄰內(nèi)存是否是未分 配狀態(tài),并將其中處于未分配狀態(tài)的相鄰內(nèi)存塊與該欲釋放的內(nèi)存塊合并 為 一個空閑的內(nèi)存塊,同時修改所述已分配內(nèi)存隊(duì)列的信息。
2、 如權(quán)利要求l所述的方法,其特征在于,所述步驟(2)中,所述 兩個隊(duì)列在初始創(chuàng)建時,所述已分配內(nèi)存隊(duì)列為空,所述未分配內(nèi)存隊(duì)列 中只有一個節(jié)點(diǎn),記錄整個大內(nèi)存池的內(nèi)存情況。
3、 如權(quán)利要求l所述的方法,其特征在于,所述步驟(3)中,所述 判斷當(dāng)前申請的內(nèi)存大小是否在普通內(nèi)存池所能提供的內(nèi)存塊大小范圍 內(nèi)的步驟,是判斷該內(nèi)存存儲塊的大小與當(dāng)前申請的內(nèi)存大小相匹配的普通內(nèi)存池中是否存在相應(yīng)的空閑內(nèi)存存儲塊。
4、 如權(quán)利要求3所述的方法,其特征在于,所述步驟(3)中,當(dāng)判 斷到當(dāng)前申請的內(nèi)存大小未在普通內(nèi)存池所能提供的內(nèi)存塊大小范圍內(nèi) 時,進(jìn)一步包括判斷當(dāng)前申請內(nèi)存的大小是否大于所述大內(nèi)存池所能提 供內(nèi)存的最大申請大小,如果是,則拒絕該申請。
5、 如權(quán)利要求3所述的方法,其特征在于,所述步驟(3)中,當(dāng)判 斷到當(dāng)前申請的內(nèi)存大小未在普通內(nèi)存池所能提供的內(nèi)存塊大小范圍內(nèi) 時,包括如果當(dāng)前申請的內(nèi)存大小不超過大內(nèi)存池所能提供內(nèi)存申請的 最大申請大小,則從所述未分配內(nèi)存的隊(duì)列中查找一個適用的內(nèi)存塊,并 判斷該找到的內(nèi)存塊的大小是否不小于普通內(nèi)存池中最大的內(nèi)存存儲塊 的大小和當(dāng)前申請內(nèi)存大小之和,如果是,則從該內(nèi)存塊中分割出一個與 當(dāng)前申請內(nèi)存塊大小匹配的內(nèi)存塊并分配給所述應(yīng)用,并將分割后剩余的 內(nèi)存信息更新到未分配內(nèi)存隊(duì)列中;如果否,則將該找到的內(nèi)存塊完全分 配給所述應(yīng)用,并才艮據(jù)分配情況更新未分配內(nèi)存隊(duì)列與已分配內(nèi)存隊(duì)列中 的信息。
6、 如權(quán)利要求1所述的方法,其特征在于,所述創(chuàng)建普通內(nèi)存池的 數(shù)量與系統(tǒng)的CPU數(shù)量一致。
7、 如權(quán)利要求1所述的方法,其特征在于,所述創(chuàng)建大內(nèi)存池的大 小不超過系統(tǒng)可申請內(nèi)存的50%。
8、 如權(quán)利要求1所述的方法,其特征在于,所述創(chuàng)建大內(nèi)存池的大 小占系統(tǒng)可申請內(nèi)存的10%至20%。
9、 如權(quán)利要求1所述的方法,其特征在于,所述為普通內(nèi)存池申請 的內(nèi)存塊的大小不同。
全文摘要
本發(fā)明公開了一種避免內(nèi)存碎片化的內(nèi)存分配方法,使內(nèi)存申請者隨時都可以申請到合適大小的內(nèi)存塊;在某種大小的內(nèi)存存儲塊消耗完后,可以到大內(nèi)存池中去申請,解決了申請不到內(nèi)存而產(chǎn)生系統(tǒng)異常的問題;當(dāng)申請大塊內(nèi)存時,可以在大的內(nèi)存池中直接的分配,解決了傳統(tǒng)方法的內(nèi)存資源的浪費(fèi)以及內(nèi)存碎片的問題。
文檔編號G06F12/02GK101122883SQ20061010429
公開日2008年2月13日 申請日期2006年8月9日 優(yōu)先權(quán)日2006年8月9日
發(fā)明者徐其龍 申請人:中興通訊股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
元朗区| 胶州市| 张掖市| 会东县| 阿尔山市| 无极县| 凤翔县| 上犹县| 甘泉县| 灵璧县| 洛隆县| 霍邱县| 西和县| 贵港市| 延长县| 南投市| 彰化县| 万州区| 盐城市| 句容市| 塔河县| 旌德县| 栾川县| 高碑店市| 蒲城县| 望谟县| 达拉特旗| 阆中市| 古蔺县| 内江市| 亚东县| 娱乐| 湘潭县| 新营市| 崇仁县| 张家港市| 星座| 宁陕县| 涟源市| 徐闻县| 沐川县|