專利名稱:一種內(nèi)存消耗可控的高速內(nèi)存申請釋放管理系統(tǒng)及方法
技術領域:
本發(fā)明涉及一種內(nèi)存管理系統(tǒng),尤其涉及一種適合應用于數(shù)據(jù)庫、工業(yè)控制領域和嵌入式系統(tǒng)的內(nèi)存消耗可控的高速內(nèi)存申請釋放管理系統(tǒng);本發(fā)明還涉及一種利用上述系統(tǒng)進行內(nèi)存的申請和釋放的方法。
背景技術:
在工業(yè)控制和嵌入式應用領域,對系統(tǒng)的實時性要求通常很高,由于系統(tǒng)的內(nèi)存資源是比較有限的,當應用軟件占用內(nèi)存過多時,系統(tǒng)的實時性就會降低,這可能給整個系統(tǒng)帶來安全隱患,因此,為了保證系統(tǒng)的實時性,必須控制應用系統(tǒng)內(nèi)存的占用量,同時還必須實現(xiàn)內(nèi)存的快速申請和釋放。普通操作系統(tǒng)的內(nèi)存管理功能,是通過API接口(如C語言的malloc和free)開放給用戶使用的。當用戶向操作系統(tǒng)申請內(nèi)存時,操作系統(tǒng)首先從管理的內(nèi)存中查找出大于所需內(nèi)存大小的內(nèi)存空間給用戶,然后建立索引,并通過索引結構管理這片分配給用戶的內(nèi)存,而查找合適的內(nèi)存空間并建立索引是比較耗時的操作,而且,由于用戶每次申請的內(nèi)存塊大小不規(guī)律,并存在頻繁的申請和釋放,這樣就會產(chǎn)生內(nèi)存碎片,導致大塊內(nèi)存申請無法滿足,從而會更多地占用系統(tǒng)資源,而進行內(nèi)存碎片整理又會增加CPU的負荷。因此, 雖然操作系統(tǒng)自身也具有內(nèi)存管理功能,但卻無法滿足工控領域的苛刻需求。為了解決上述內(nèi)存分配和釋放以及內(nèi)存碎片的問題,《STL源碼剖析》(作者侯捷, 華中科技大學出版社,2002年5月出版,ISBN :756092699) —書中提出了 SGI STL內(nèi)存管理方法。該方法應用內(nèi)存池管理內(nèi)存,該內(nèi)存池維護了 16個鏈表,這16個鏈表分別用于維護8、16、24、……128個字節(jié)長的小內(nèi)存,當用戶需要分配內(nèi)存時,將用戶所需要分配內(nèi)存的大小上調(diào)為8的整數(shù)倍再進行申請,如此即可用16個鏈表解決用戶1 1 個字節(jié)的內(nèi)存需求,如果鏈表中空間不夠,就向操作系統(tǒng)申請頁大小的大內(nèi)存,內(nèi)部切分后掛載到原鏈表上,以滿足新內(nèi)存申請的需求;當用戶需要釋放內(nèi)存時,重新掛到原鏈表上。這種方法解決了內(nèi)存快速申請和釋放的問題,同時保證不會產(chǎn)生內(nèi)存碎片。但該內(nèi)存管理方法會導致內(nèi)存大小不可控,這是因為,一方面,不同鏈表之間的空閑內(nèi)存無法調(diào)劑并互相利用,比如 8字節(jié)的鏈表沒有剩余空間時,16字節(jié)鏈表中即使有大量的空閑內(nèi)存,也無法分配給用戶; 另一方面,當用戶釋放出內(nèi)存時,內(nèi)存池無法將空閑的內(nèi)存還給操作系統(tǒng),供別的應用軟件使用,因此,SGI STL內(nèi)存管理方法中,所使用的內(nèi)存大小取決于內(nèi)存使用達到峰值時的內(nèi)存量,可見該方法具有一定的局限性。中國第01118873. 1號名稱為“自適應動態(tài)內(nèi)存管理方法”的發(fā)明專利提出了另外一種內(nèi)存管理方法。該方法是將內(nèi)存劃分為頁面簇,頁面簇由頁面組成,每個頁面容納一個分片,分片長度相同的頁面簇為同類型頁面簇,不同類型的頁面簇可以相互轉(zhuǎn)換。當用戶申請某種類型的分片時,如果該類型頁面簇中有空閑的分片,則直接取用分片;當該類型的頁面簇中的所有分片都被占用時,可以從其它類型的頁面簇中找出其中各分片均處于空閑的頁面簇,改變其類型,將其中分片的長度改變?yōu)樗桀愋?,再進行分配。該方法通過調(diào)劑不同類型間的內(nèi)存,可以提高內(nèi)存的利用率,但是,由于其在小片內(nèi)存時申請,實質(zhì)是向其它的小片內(nèi)存申請,因此,內(nèi)存管理的CPU開銷比較高,而小片內(nèi)存釋放時,也不會把釋放的內(nèi)存歸還給操作系統(tǒng),因此,整個系統(tǒng)的內(nèi)存總量只能增加,不能減少,在內(nèi)存使用達到峰值后,內(nèi)存的占用量同樣不會回落。
發(fā)明內(nèi)容
本發(fā)明要解決的技術問題是提供一種內(nèi)存消耗可控的高速內(nèi)存申請釋放管理系統(tǒng),它可以實現(xiàn)內(nèi)存的快速申請和釋放,并能有效控制內(nèi)存的占用量。為解決上述技術問題,本發(fā)明的內(nèi)存消耗可控的高速內(nèi)存申請釋放管理系統(tǒng),包括有多個空閑內(nèi)存鏈表,各空閑內(nèi)存鏈表分別用于管理一組大小相同的空閑內(nèi)存片, 同組空閑內(nèi)存片在物理上分布于同一個內(nèi)存頁中,且在其總量達到一預設值時,釋放給頁內(nèi)存池;頁內(nèi)存池,用于向空閑內(nèi)存鏈表提供空閑內(nèi)存片,并接收空閑內(nèi)存鏈表釋放的內(nèi)存頁,該頁內(nèi)存池以頁為單位組織內(nèi)存,并預設有空閑內(nèi)存頁總量上限,超過上限的空閑內(nèi)存頁釋放給操作系統(tǒng)的內(nèi)存管理模塊;操作系統(tǒng)的內(nèi)存管理模塊,用于向頁內(nèi)存池提供空閑內(nèi)存頁,并接收頁內(nèi)存池釋放的內(nèi)存頁。所述空閑內(nèi)存片由頁內(nèi)存池的空閑內(nèi)存頁切分得到。所述空閑內(nèi)存片劃分為變量指針區(qū)和可使用內(nèi)存區(qū)兩部分,變量指針區(qū)用于保存用戶變量的地址,可使用內(nèi)存區(qū)用于提供給用戶使用。本發(fā)明要解決的另一技術問題是提供一種利用上述系統(tǒng)實現(xiàn)的內(nèi)存消耗可控的高速內(nèi)存申請釋放管理方法。為解決上述技術問題,本發(fā)明的內(nèi)存消耗可控的高速內(nèi)存申請釋放管理方法,包括以下步驟申請內(nèi)存時,首先判斷空閑內(nèi)存鏈表中是否有足夠的內(nèi)存片,是,則將空閑內(nèi)存鏈表中的內(nèi)存片分配給用戶;否,則向頁內(nèi)存池申請新的空閑內(nèi)存片,如果頁內(nèi)存池中的空閑內(nèi)存頁不夠,則再向操作系統(tǒng)的內(nèi)存管理模塊申請新的空閑內(nèi)存頁;釋放內(nèi)存時,首先調(diào)整內(nèi)存片的分布,將已使用的內(nèi)存片和空閑內(nèi)存片在空間上彼此分開,并使空閑內(nèi)存片在物理上位于同一個內(nèi)存頁之內(nèi);然后,當空閑內(nèi)存鏈表中的內(nèi)存片總量達到一預設值時,將該空閑內(nèi)存鏈表中的內(nèi)存片釋放給頁內(nèi)存池,當頁內(nèi)存池中的空閑內(nèi)存頁數(shù)量超過頁內(nèi)存池的空閑內(nèi)存總量上限時,將超出的空閑內(nèi)存頁釋放給操作系統(tǒng)的內(nèi)存管理模塊。所述空閑內(nèi)存片包括變量指針區(qū)和可使用內(nèi)存區(qū)兩部分,分配內(nèi)存時,將可使用內(nèi)存區(qū)的內(nèi)存地址賦值給用戶變量,供用戶使用,并同時將該用戶變量的地址保存在該內(nèi)存片的變量指針區(qū);釋放內(nèi)存時,通過該內(nèi)存片的變量指針區(qū)中保存的用戶變量的地址,通知用戶更新用戶變量,使用戶變量指向正確的內(nèi)存片。所述向頁內(nèi)存池申請空閑內(nèi)存片的步驟是向頁內(nèi)存池申請一個空閑內(nèi)存頁,按照所需空閑內(nèi)存片的大小,等分成若干內(nèi)存片,然后將這些內(nèi)存片鏈接在對應的空閑內(nèi)存鏈表中。所述調(diào)整內(nèi)存片的分布,包括以下步驟1)將與第一個空閑內(nèi)存片相鄰的已使用內(nèi)存片中的數(shù)據(jù)移動到新釋放的內(nèi)存片中,使該已使用內(nèi)存片被釋放,成為新的空閑內(nèi)存片;2)將該新的空閑內(nèi)存片掛載到空閑內(nèi)存鏈表的頭部;3)調(diào)整頭指針,使其指向該新的空閑內(nèi)存片。本發(fā)明的內(nèi)存管理方法,具有下列優(yōu)點和有益效果1、小片內(nèi)存申請時,是向底層的頁內(nèi)存池申請的,因此,內(nèi)存管理的CPU開銷比較小;2、小片內(nèi)存釋放時,可以通過內(nèi)存的調(diào)整,空出一個完整的頁,返回給操作系統(tǒng), 從而可以減少內(nèi)存占用量;3、內(nèi)存的申請和釋放,大部分通過頁內(nèi)存池進行,不需要操作系統(tǒng)進行耗時的空閑內(nèi)存查詢和索引建立操作,因此可以加快內(nèi)存申請和釋放的速度。
下面結合附圖與具體實施方式
對本發(fā)明作進一步詳細的說明圖1是本發(fā)明的頁內(nèi)存池和空閑內(nèi)存鏈表的邏輯結構示意圖;圖2是本發(fā)明申請內(nèi)存時的流程圖;圖3是本發(fā)明的內(nèi)存片的結構示意圖;圖4是本發(fā)明空閑內(nèi)存鏈表的實際物理結構示意圖;圖5是在圖4基礎上進行內(nèi)存的釋放和調(diào)整后,形成的空閑內(nèi)存鏈表結構示意圖;圖6是本發(fā)明與SGI STL內(nèi)存管理方法在內(nèi)存申請和釋放過程中的內(nèi)存占用情況對比圖。
具體實施例方式為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明的內(nèi)存消耗可控的高速內(nèi)存申請釋放管理系統(tǒng)及方法,采用操作系統(tǒng)的內(nèi)存管理模塊與下層的頁內(nèi)存池和上層的空閑內(nèi)存鏈表相互配合的方式來實現(xiàn)內(nèi)存的高效管理。該頁內(nèi)存池和空閑內(nèi)存鏈表的邏輯結構請參閱圖1所示。頁內(nèi)存池,位于內(nèi)存分配的最底層,以頁為單位組織內(nèi)存,并采用鏈表的形式管理其中的空閑內(nèi)存頁(初始化時, 頁內(nèi)存池中沒有空閑的內(nèi)存頁)。本實施例的內(nèi)存申請釋放管理系統(tǒng)共維護了 16個空閑內(nèi)存鏈表,該16個空閑內(nèi)存鏈表分別用于管理8、16、24、……1 個字節(jié)長的空閑內(nèi)存片,且每個空閑內(nèi)存鏈表設置有一個頭指針,指向本空閑內(nèi)存鏈表的第一個內(nèi)存片。內(nèi)存片則由分配到的內(nèi)存頁切分得到。請參閱圖2所示,當用戶申請內(nèi)存時,首先,按照向上取整的原則,即所申請內(nèi)存的字節(jié)數(shù)調(diào)整為8的整數(shù)倍,據(jù)此決定向哪個空閑內(nèi)存鏈表申請內(nèi)存。例如,用戶需要申請長度位于9 16個字節(jié)的內(nèi)存,按照向上取整的原則,可確定用戶需要16個字節(jié)長的可使用內(nèi)存,故決定向16字節(jié)空閑內(nèi)存鏈表申請一個16字節(jié)長的空閑內(nèi)存片。然后,判斷該空閑內(nèi)存鏈表中是否有空閑的內(nèi)存片,如果有,就直接將空閑內(nèi)存片分配給用戶;如果沒有,則向頁內(nèi)存池申請一頁內(nèi)存。如果頁內(nèi)存池中有空閑的內(nèi)存頁,就將該內(nèi)存頁切分成同等大小的內(nèi)存片,每個內(nèi)存片包括變量指針區(qū)和用戶可使用內(nèi)存區(qū)兩部分,如圖3所示。每個內(nèi)存片的前面4個字節(jié)為變量指針區(qū)(若是64位操作系統(tǒng),則留 8個字節(jié)的指針空間),用于保存用戶變量的地址或下一個空閑內(nèi)存片的地址,剩下的空間則為用戶可使用內(nèi)存區(qū)。當獲得的一個空閑內(nèi)存頁切分后,通過變量指針區(qū)將這些切分得到的內(nèi)存片串接起來,掛載到同類型的空閑內(nèi)存鏈表中。例如,當用戶需要16個字節(jié)長的可使用內(nèi)存時,就將內(nèi)存頁切分成長度都為20個字節(jié)的內(nèi)存片,串接后掛載到16字節(jié)的空閑內(nèi)存鏈表上。如果頁內(nèi)存池中沒有空閑的內(nèi)存頁,則頁內(nèi)存池向操作系統(tǒng)的內(nèi)存管理模塊申請一頁內(nèi)存,按照上述方法切分后,掛載到空閑內(nèi)存鏈表中。向用戶分配內(nèi)存時,將空閑內(nèi)存片的可使用內(nèi)存區(qū)的指針賦值給用戶變量,用戶即可拿這個用戶變量訪問申請的內(nèi)存片。同時,該用戶變量的地址被保存到該內(nèi)存片中的變量指針區(qū),以供在該內(nèi)存片在釋放移動時,同步調(diào)整用戶變量。當用戶釋放內(nèi)存時,首先,進行內(nèi)存片分布的調(diào)整,使已分配給用戶使用的內(nèi)存片聚集在一起,未分配給用戶使用的空閑內(nèi)存片也聚在一起,并且使空閑內(nèi)存片在物理上位于同一個內(nèi)存頁之內(nèi)。同時,更新用戶變量,使其指向調(diào)整后的內(nèi)存片。例如,圖4是一個空閑內(nèi)存鏈表的實際物理結構圖,圖中每一行(A1到HnA2到H2,A3到H3)代表一個內(nèi)存頁, 每一格(ApB1……H3)代表一個內(nèi)存片,各內(nèi)存片大小相同,其中,C3到H3為空閑內(nèi)存片,用指針進行了串接,其他均為已使用內(nèi)存片;當已使用內(nèi)存片D2被釋放時,將與空閑內(nèi)存片相鄰的那個已使用內(nèi)存片(即內(nèi)存片B3)中的數(shù)據(jù)移動到內(nèi)存片D2的位置,即用內(nèi)存片 的內(nèi)容覆蓋內(nèi)存片D2的內(nèi)容,以釋放內(nèi)存片D2,然后,根據(jù)內(nèi)存片 的變量指針區(qū)中保存的用戶變量的地址,通知該用戶變量修改其所指向的可使用內(nèi)存區(qū)的地址,即以內(nèi)存片A的可使用內(nèi)存區(qū)的地址替換原來存放的內(nèi)存片 的可使用內(nèi)存區(qū)的地址,這樣,當用戶以后訪問這些內(nèi)容時,就會自動重定向到內(nèi)存片D2的可使用內(nèi)存區(qū)的地址,而新釋放的內(nèi)存片 則被掛載到空閑內(nèi)存鏈表頭部,且該空閑內(nèi)存鏈表的頭指針也被調(diào)整為指向該新釋放的內(nèi)存片&。這樣,所有已分配的內(nèi)存和未分配的內(nèi)存就在空間上彼此分開了,且全部空閑內(nèi)存片都位于同一個內(nèi)存頁中,如圖5所示。當某個空閑內(nèi)存鏈表中的空閑內(nèi)存片的字節(jié)數(shù)總和達到一個頁大小時,空閑內(nèi)存鏈表可以將該頁內(nèi)存釋放給頁內(nèi)存池。為了防止頁內(nèi)存池過度占用系統(tǒng)的內(nèi)存,可以預先為頁內(nèi)存池設置一個空閑內(nèi)存頁數(shù)量上限,當頁內(nèi)存池中的空閑內(nèi)存頁的數(shù)量達到此上限時,新釋放的內(nèi)存頁就不再存入頁內(nèi)存池,而是直接返還給操作系統(tǒng)的內(nèi)存管理模塊,如此就能降低系統(tǒng)整體占用的內(nèi)存量。可見,頁內(nèi)存池為上一層的內(nèi)存分配提供了內(nèi)存緩沖,由于頁內(nèi)存池的存在,絕大多數(shù)的頁內(nèi)存申請和釋放都不用通過操作系統(tǒng),從而避免了操作系統(tǒng)進行耗時的空閑內(nèi)存查詢和建立索引等操作,經(jīng)測試,該方法的時間復雜度可以達到0(1),因此,內(nèi)存的申請和釋放速度很快。
本發(fā)明對內(nèi)存占用量的控制效果如圖6所示。該圖是分別應用本發(fā)明和SGISTL內(nèi)存管理方法進行內(nèi)存申請和釋放過程所得到的實驗結果。該實驗每次申請64個字節(jié)的內(nèi)存,不斷地進行申請,直至申請的內(nèi)存總量達到20M,然后進行內(nèi)存釋放,每次釋放64個字節(jié)的內(nèi)存,將上述內(nèi)存申請和釋放過程中,內(nèi)存占用的情況記錄下來,并以申請內(nèi)存量為橫坐標,內(nèi)存占用量為縱坐標,繪制出內(nèi)存占用情況圖,即圖6。由該圖可以看出,在內(nèi)存申請過程中,兩種方法所占用的內(nèi)存都是逐步增多,本發(fā)明在申請過程中的內(nèi)存消耗比SGI STL 內(nèi)存管理方法略高,是因為本發(fā)明內(nèi)存片中附帶用戶變量的地址;而在內(nèi)存釋放過程中,應用SGI STL內(nèi)存管理方法時,內(nèi)存占用量基本不變,而應用本發(fā)明的內(nèi)存申請釋放管理系統(tǒng)和方法時,內(nèi)存占用量則會隨著內(nèi)存的釋放而逐步減少,可見,現(xiàn)有的SGI STL內(nèi)存管理方法,不能將釋放的內(nèi)存歸還給操作系統(tǒng),而本發(fā)明卻能夠?qū)媚K釋放的內(nèi)存還給操作系統(tǒng),使內(nèi)存占用量在達到頂峰后,還能隨著內(nèi)存的釋放而逐步回落,從而實現(xiàn)了內(nèi)存占用量的可控。綜上所述,本發(fā)明的內(nèi)存消耗可控的高速內(nèi)存申請釋放管理方法,能夠?qū)崿F(xiàn)內(nèi)存的快速申請和釋放,并能保證內(nèi)存占用量的可控,因此,特別適合對內(nèi)存總量控制較嚴的嵌入式設備或工業(yè)控制場合,以及對內(nèi)存管理的性能和總量要求較嚴的數(shù)據(jù)庫產(chǎn)品和對數(shù)據(jù)處理要求很高的應用場合。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
權利要求
1.一種內(nèi)存消耗可控的高速內(nèi)存申請釋放管理系統(tǒng),其特征在于,包括有多個空閑內(nèi)存鏈表,各空閑內(nèi)存鏈表分別用于管理一組大小相同的空閑內(nèi)存片,同組空閑內(nèi)存片在物理上分布于同一個內(nèi)存頁中,且在其總量達到一預設值時,釋放給頁內(nèi)存池;頁內(nèi)存池,用于向空閑內(nèi)存鏈表提供空閑內(nèi)存片,并接收空閑內(nèi)存鏈表釋放的內(nèi)存頁, 該頁內(nèi)存池以頁為單位組織內(nèi)存,并預設有空閑內(nèi)存頁總量上限,超過上限的空閑內(nèi)存頁釋放給操作系統(tǒng)的內(nèi)存管理模塊;操作系統(tǒng)的內(nèi)存管理模塊,用于向頁內(nèi)存池提供空閑內(nèi)存頁,并接收頁內(nèi)存池釋放的內(nèi)存頁。
2.如權利要求1所述的高速內(nèi)存申請釋放管理系統(tǒng),其特征在于所述空閑內(nèi)存片由頁內(nèi)存池的空閑內(nèi)存頁切分得到。
3.如權利要求1所述的內(nèi)存申請釋放管理系統(tǒng),其特征在于所述空閑內(nèi)存片劃分為變量指針區(qū)和可使用內(nèi)存區(qū)兩部分,變量指針區(qū)用于保存用戶變量的地址,可使用內(nèi)存區(qū)用于提供給用戶使用。
4.如權利要求1所述的內(nèi)存申請釋放管理系統(tǒng),其特征在于所述預設值為一個內(nèi)存頁。
5.一種利用權利要求1的系統(tǒng)實現(xiàn)的內(nèi)存消耗可控的高速內(nèi)存申請釋放管理方法,其特征在于,包括以下步驟申請內(nèi)存時,首先判斷空閑內(nèi)存鏈表中是否有足夠的內(nèi)存片,是,則將空閑內(nèi)存鏈表中的內(nèi)存片分配給用戶;否,則向頁內(nèi)存池申請新的空閑內(nèi)存片,如果頁內(nèi)存池中的空閑內(nèi)存頁不夠,則再向操作系統(tǒng)的內(nèi)存管理模塊申請新的空閑內(nèi)存頁;釋放內(nèi)存時,首先調(diào)整內(nèi)存片的分布,將已使用的內(nèi)存片和空閑內(nèi)存片在空間上彼此分開,并使空閑內(nèi)存片在物理上位于同一個內(nèi)存頁之內(nèi);然后,當空閑內(nèi)存鏈表中的內(nèi)存片總量達到一預設值時,將該空閑內(nèi)存鏈表中的內(nèi)存片釋放給頁內(nèi)存池,當頁內(nèi)存池中的空閑內(nèi)存頁數(shù)量超過頁內(nèi)存池的空閑內(nèi)存總量上限時,將超出的空閑內(nèi)存頁釋放給操作系統(tǒng)的內(nèi)存管理模塊。
6.如權利要求5所述的內(nèi)存申請釋放管理方法,其特征在于所述空閑內(nèi)存片包括變量指針區(qū)和可使用內(nèi)存區(qū)兩部分,分配內(nèi)存時,將可使用內(nèi)存區(qū)的內(nèi)存地址賦值給用戶變量,供用戶使用,并同時將該用戶變量的地址保存在該內(nèi)存片的變量指針區(qū);釋放內(nèi)存時, 通過該內(nèi)存片的變量指針區(qū)中保存的用戶變量的地址,通知用戶更新用戶變量,使用戶變量指向正確的內(nèi)存片。
7.如權利要求5所述的內(nèi)存申請釋放管理方法,其特征在于,所述向頁內(nèi)存池申請空閑內(nèi)存片的步驟是向頁內(nèi)存池申請一個空閑內(nèi)存頁,按照所需空閑內(nèi)存片的大小,等分成若干內(nèi)存片,然后將這些內(nèi)存片鏈接在對應的空閑內(nèi)存鏈表中。
8.如權利要求5所述的內(nèi)存申請釋放管理方法,其特征在于,所述調(diào)整內(nèi)存片的分布, 包括以下步驟1)將與第一個空閑內(nèi)存片相鄰的已使用內(nèi)存片中的數(shù)據(jù)移動到新釋放的內(nèi)存片中,使該已使用內(nèi)存片被釋放,成為新的空閑內(nèi)存片;2)將該新的空閑內(nèi)存片掛載到空閑內(nèi)存鏈表的頭部;3)調(diào)整頭指針,使其指向該新的空閑內(nèi)存片。
9.如權利要求5所述的內(nèi)存申請釋放管理方法,其特征在于所述預設值為一個內(nèi)存頁。
全文摘要
本發(fā)明公開了一種內(nèi)存消耗可控的高速內(nèi)存申請釋放管理系統(tǒng),通過操作系統(tǒng)、頁內(nèi)存池和空閑內(nèi)存鏈表的相互配合實現(xiàn),頁內(nèi)存池包含內(nèi)存頁,多個空閑內(nèi)存鏈表分別管理字節(jié)數(shù)相同的空閑內(nèi)存片,頁內(nèi)存池可以向空閑內(nèi)存鏈表提供內(nèi)存,也可以接收空閑內(nèi)存鏈表釋放的內(nèi)存。本發(fā)明還公開了一種利用上述系統(tǒng)實現(xiàn)的內(nèi)存管理方法。該內(nèi)存申請釋放管理系統(tǒng)及方法可以實現(xiàn)內(nèi)存的快速申請和釋放,并能有效控制內(nèi)存占用量。在申請和釋放內(nèi)存時,通過頁內(nèi)存池為上一層內(nèi)存分配提供緩沖,不需調(diào)用操作系統(tǒng)的內(nèi)存管理接口,從而加快了內(nèi)存申請和釋放的速度,同時,通過對頁內(nèi)存池的容量設置上限,進一步控制了應用系統(tǒng)整體的內(nèi)存占用量,使內(nèi)存利用率得到提升。
文檔編號G06F12/02GK102455974SQ20101051447
公開日2012年5月16日 申請日期2010年10月21日 優(yōu)先權日2010年10月21日
發(fā)明者叢力群, 李振光, 沈春鋒, 胡兵, 董文生, 聞?chuàng)P 申請人:上海寶信軟件股份有限公司