亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種內(nèi)存管理方法和內(nèi)存管理系統(tǒng)的制作方法

文檔序號:6578721閱讀:159來源:國知局
專利名稱:一種內(nèi)存管理方法和內(nèi)存管理系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及信息技術(shù)領(lǐng)域,特別涉及一種內(nèi)存管理方法和內(nèi)存管理系統(tǒng)。
背景技術(shù)
網(wǎng)絡(luò)上運行的各種協(xié)議和算法越來越豐富,這些都需要配置和管理大量的內(nèi)存來 支持,內(nèi)存管理中有兩個參數(shù)比較重要,即內(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)存的內(nèi)存管理算法中,有些內(nèi)存管理算法能夠?qū)崿F(xiàn)較高的內(nèi) 存管理性能;有些內(nèi)存管理算法能夠?qū)崿F(xiàn)較高的內(nèi)存利用率,可以根據(jù)不同的應(yīng)用場合選 擇不同的內(nèi)存管理算法。局部壓縮算法可以通過調(diào)節(jié)因子實現(xiàn)對內(nèi)存利用率和內(nèi)存管理性能進行調(diào)節(jié),通 常,調(diào)節(jié)因子的值越大,內(nèi)存利用率越高,相應(yīng)的,內(nèi)存管理性能越低;相反,調(diào)節(jié)因子的值 越小,內(nèi)存管理性能越高,相應(yīng)的,內(nèi)存利用率越低??梢愿鶕?jù)不同的應(yīng)用場合,預(yù)先為調(diào)節(jié) 因子設(shè)置合適的值,以滿足不同的應(yīng)用場合對內(nèi)存管理性能和內(nèi)存利用率的不同需求,由 于這種靈活性,使得局部壓縮算法在內(nèi)存管理中得到了越來越廣的應(yīng)用。局部壓縮算法是將不同大小的內(nèi)存塊混放在一起,當(dāng)混放的內(nèi)存塊滿足數(shù)據(jù)段的 長度大于或等于KW,或數(shù)據(jù)段后面的空洞長度大于或等于W時,內(nèi)存處于穩(wěn)定狀態(tài),其中K 為調(diào)節(jié)因子,為> 1的整數(shù),W為預(yù)先設(shè)定的單次申請或單次釋放內(nèi)存區(qū)域的最大長度。而 在有內(nèi)存申請或內(nèi)存釋放時,如果出現(xiàn)數(shù)據(jù)段的長度小于KW,且數(shù)據(jù)段后的空洞長度也小 于W時,內(nèi)存便會處于不穩(wěn)定狀態(tài),此時需要通過內(nèi)存搬移使得內(nèi)存重新恢復(fù)穩(wěn)定。其中未 被使用的內(nèi)存空間為空洞,數(shù)據(jù)段為相鄰兩個空洞之間寫有數(shù)據(jù)的區(qū)域,該寫有數(shù)據(jù)的區(qū) 域可以由連續(xù)的至少一個內(nèi)存塊構(gòu)成。在實施本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題,目前越來越多 的應(yīng)用場合需要能夠同時兼顧內(nèi)存管理性能和內(nèi)存利用率,比如在路由器上運行路由查找 算法的應(yīng)用場合中,需要在保證內(nèi)存利用率較高的情況下,內(nèi)存管理性能也不會太差,而局 部壓縮算法,在保證內(nèi)存利用率較高的情況下,內(nèi)存管理性能相對較差,不能很好的同時兼 顧到內(nèi)存利用率和內(nèi)存管理性能。

發(fā)明內(nèi)容
本發(fā)明實施例提供一種內(nèi)存管理方法和內(nèi)存管理系統(tǒng),以解決局部壓縮算法不能 很好的同時兼顧到內(nèi)存利用率和內(nèi)存管理性能的問題。一方面,提供了一種內(nèi)存管理方法,將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域, 采用局部壓縮算法管理第一內(nèi)存區(qū)域,所述方法包括所述第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞,所述第二內(nèi)存塊位于所述第二內(nèi)存區(qū)域中。另一方面,提供了一種內(nèi)存管理系統(tǒng),包括劃分模塊,用于將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域;管理模塊,用于采用局部壓縮算法管理第一內(nèi)存區(qū)域;填充模塊,用于所述第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用第二內(nèi)存塊中的數(shù)據(jù)填 充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞,所述第二內(nèi)存塊位于所述第二內(nèi)存區(qū)域中。本發(fā)明實施例提供的一種內(nèi)存管理方法和內(nèi)存管理系統(tǒng),有益效果是通過劃分 第二內(nèi)存區(qū)域作為輔助區(qū)域,利用局部壓縮算法管理第一內(nèi)存區(qū)域時,當(dāng)?shù)谝粌?nèi)存區(qū)域處 于不穩(wěn)定狀態(tài)時,從第二內(nèi)存區(qū)域中取出長度合適的第二內(nèi)存塊的數(shù)據(jù)來填充導(dǎo)致第一內(nèi) 存區(qū)域不穩(wěn)定的空洞,由于僅需要搬移導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞大小的內(nèi)存空間, 該空洞的長度通常較小,從而大大減少內(nèi)存的搬移量,使得第一內(nèi)存區(qū)域能夠快速的恢復(fù) 到穩(wěn)定狀態(tài),進而在保證內(nèi)存利用率較高的情況下,進一步提高局部壓縮算法的內(nèi)存管理 性能,從而使得局部壓縮算法能夠較好的同時兼顧到內(nèi)存利用率和內(nèi)存管理性能。


為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。圖1-1為現(xiàn)有技術(shù)局部壓縮算法中處于穩(wěn)定狀態(tài)的內(nèi)存區(qū)域;圖1-2為現(xiàn)有技術(shù)局部壓縮算法中處于不穩(wěn)定狀態(tài)的內(nèi)存區(qū)域;圖1-3為現(xiàn)有技術(shù)局部壓縮算法搬移后處于穩(wěn)定狀態(tài)的內(nèi)存區(qū)域;圖1-4為現(xiàn)有技術(shù)局部壓縮算法中處于不穩(wěn)定狀態(tài)的內(nèi)存區(qū)域;圖2為本發(fā)明實施例提供的一種內(nèi)存管理方法流程圖;圖3為本發(fā)明實施例提供的另一種內(nèi)存管理方法流程圖;圖4為本發(fā)明實施例提供的另一種內(nèi)存管理方法流程圖;圖5為本發(fā)明實施例中第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域示意圖;圖5-1為本發(fā)明實施例中在第一內(nèi)存區(qū)域釋放內(nèi)存示意圖;圖5-2為本發(fā)明實施例中在第一內(nèi)存區(qū)域釋放內(nèi)存示意圖;圖5-3為本發(fā)明實施例中在第一內(nèi)存區(qū)域釋放內(nèi)存示意圖;圖5-4為本發(fā)明實施例中在第一內(nèi)存區(qū)域分配內(nèi)存示意圖;圖5-5為本發(fā)明實施例中在第一內(nèi)存區(qū)域分配內(nèi)存示意圖;圖5-6為本發(fā)明實施例中在第一內(nèi)存區(qū)域分配內(nèi)存示意圖;圖6為本發(fā)明實施例中內(nèi)存申請時填充空洞的示意圖;圖7為本發(fā)明實施例中內(nèi)存釋放時填充空洞的示意圖;圖8為本發(fā)明實施例提供的另一種內(nèi)存管理方法流程圖;圖9為本發(fā)明實施例提供的再一種內(nèi)存管理方法流程圖;圖10為本發(fā)明實施例提供的一種內(nèi)存管理系統(tǒng)框圖;圖11為本發(fā)明實施例提供的另一種內(nèi)存管理系統(tǒng)框圖12為本發(fā)明實施例提供的另一種內(nèi)存管理系統(tǒng)框圖;圖13為本發(fā)明實施例提供的再一種內(nèi)存管理系統(tǒng)框圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方 式作進一步地詳細(xì)描述。局部壓縮算法是在內(nèi)存管理中得到廣泛應(yīng)用的一種內(nèi)存管理算法,該算法應(yīng)用比 較靈活,可以通過調(diào)節(jié)因子滿足不同應(yīng)用場合對內(nèi)存利用率和內(nèi)存管理性能的不同需求。利用局部壓縮算法進行內(nèi)存管理的方法具體為將不同大小的內(nèi)存塊混放在一 起,一般當(dāng)有內(nèi)存申請時,會隨機分配一段內(nèi)存空間供使用,即生成一個新的內(nèi)存塊;逐漸 的,隨著內(nèi)存被越來越多的使用,就會在內(nèi)存中形成一個個有數(shù)據(jù)的內(nèi)存塊和一個個沒有 被分配使用的空洞,相鄰兩個空洞之間寫有數(shù)據(jù)的區(qū)域就是數(shù)據(jù)段,該寫有數(shù)據(jù)的區(qū)域可 以由連續(xù)的至少一個內(nèi)存塊構(gòu)成。當(dāng)混放的內(nèi)存塊滿足如下兩個條件之一時,內(nèi)存處于穩(wěn) 定狀態(tài)1、數(shù)據(jù)段的長度大于或等于KW ;K為調(diào)節(jié)因子;2、數(shù)據(jù)段后的空洞長度大于或等于W ;上述W為預(yù)先設(shè)定的單次申請/釋放內(nèi)存區(qū)域的最大長度,該最大長度可以根據(jù) 具體的應(yīng)用場合預(yù)先設(shè)定。采用局部壓縮算法管理內(nèi)存,其內(nèi)存管理性能主要體現(xiàn)在申請內(nèi)存或釋放內(nèi)存 時,內(nèi)存從不穩(wěn)定狀態(tài)恢復(fù)到穩(wěn)定狀態(tài)的管理性能。參見圖1-1至圖1-4,圖1-1示出的內(nèi)存區(qū)域中,數(shù)據(jù)段1的長度大于或等于KW, 數(shù)據(jù)段2的長度也大于或等于KW,均滿足第一個條件,數(shù)據(jù)段3的長度小于KW,不滿足第一 個條件,而其后的空洞3的長度大于W,滿足第二個條件,此時,該內(nèi)存區(qū)域處于穩(wěn)定狀態(tài)。參見圖1-2,在有內(nèi)存申請時,分配一段內(nèi)存空間供使用,此時會形成新的數(shù)據(jù)段 A,即新的內(nèi)存塊a,并生成新的空洞1'和空洞1",如果數(shù)據(jù)段A的長度小于KW,而其后的 空洞1"的長度也小于W,則圖1-2中示出的內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài),此時需要通過內(nèi)存 搬移,至該內(nèi)存區(qū)域重新滿足上述兩個條件之一,重新恢復(fù)到穩(wěn)定狀態(tài)。通常采用的內(nèi)存搬 移方法是搬移數(shù)據(jù)段A相鄰的數(shù)據(jù)段(可以是其前面相鄰的數(shù)據(jù)段,也可以是其后面相鄰 的數(shù)據(jù)段),與數(shù)據(jù)段A連接起來,形成新的數(shù)據(jù)段,使得新的數(shù)據(jù)段的長度大于或等于KW, 或使得搬移后形成的新的空洞的長度大于或等于W,如果此次搬移均不能滿足上述兩個條 件,則需要再次進行內(nèi)存搬移,直至內(nèi)存重新恢復(fù)到穩(wěn)定狀態(tài)。比如,參見圖1-3,數(shù)據(jù)段1 長度小于KW,空洞1的長度大于W,當(dāng)有內(nèi)存申請時,在空洞1的前端分配數(shù)據(jù)段A供使用, 此時,數(shù)據(jù)段A與其相鄰的數(shù)據(jù)段1合并,形成新的數(shù)據(jù)段a,空洞la,經(jīng)判斷數(shù)據(jù)段a的長 度小于KW,空洞Ia的長度小于W,則將數(shù)據(jù)段2整塊搬移到數(shù)據(jù)段a后面,以使得內(nèi)存處于 穩(wěn)定狀態(tài)??梢姡藭r需要搬移整個數(shù)據(jù)段2那么大長度的內(nèi)存空間,才能使得內(nèi)存恢復(fù)穩(wěn)定,因此需要搬移的內(nèi)存量較大,對內(nèi)存的管理性能消耗較多,故內(nèi)存的管理性能較低。參見圖1-4,在內(nèi)存釋放時,將內(nèi)存塊b釋放,此時,會形成新的數(shù)據(jù)段1'和數(shù)據(jù) 段1",和新的空洞B,由于W為預(yù)先設(shè)定的單次申請或單次釋放內(nèi)存區(qū)域的最大長度,則 空洞B的長度小于W,如果數(shù)據(jù)段1'的長度小于KW,則圖1-4中示出的內(nèi)存區(qū)域處于不穩(wěn) 定狀態(tài),此時需要通過內(nèi)存搬移,使該內(nèi)存區(qū)域重新滿足上述兩個條件之一,恢復(fù)到穩(wěn)定狀 態(tài)。通常采用的內(nèi)存搬移方法是搬移數(shù)據(jù)段1'相鄰的數(shù)據(jù)段(可以是其前面相鄰的數(shù)據(jù) 段,也可以是其后面相鄰的數(shù)據(jù)段),與數(shù)據(jù)段1 ‘連接起來,形成新的數(shù)據(jù)段,使得新的數(shù) 據(jù)段的長度大于或等于KW,或使得搬移后形成的新的空洞的長度大于或等于W,如果此次 搬移均不能滿足上述兩個條件,則需要再次進行內(nèi)存搬移,直至內(nèi)存重新恢復(fù)到穩(wěn)定狀態(tài)。當(dāng)內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,往往會導(dǎo)致需要搬移大量的內(nèi)存空間才能使得內(nèi) 存重新恢復(fù)到穩(wěn)定狀態(tài),尤其是內(nèi)存中的空閑空間較少時,需要搬移的內(nèi)存空間會急劇增 大,即會導(dǎo)致內(nèi)存管理性能急劇下降,比如應(yīng)用在路由查找算法中就會出現(xiàn)當(dāng)表項很多時 會導(dǎo)致表項刷新性能急劇下降,其中表項刷新性能是指單位時間內(nèi)增加表項的性能或單位 時間內(nèi)刪除表項的性能,可見,如果表項刷新性能急劇下降,將會使路由查找算法的實現(xiàn)變 得非常困難。而大量的內(nèi)存搬移就是內(nèi)存管理性能無法提高的主要瓶頸,所以,本發(fā)明實施 例在保證內(nèi)存利用率較高的情況下,通過減少內(nèi)存搬移量,提高局部壓縮算法的內(nèi)存管理 性能,從而使得局部壓縮算法能夠較好的同時兼顧到內(nèi)存利用率和內(nèi)存管理性能,以便使 得能夠應(yīng)用在更多需要能夠同時兼顧內(nèi)存管理性能和內(nèi)存利用率的應(yīng)用場合。參見圖2,本發(fā)明實施例提供一種內(nèi)存管理方法,包括如下步驟S201 將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,采用局部壓縮算法管理第一 內(nèi)存區(qū)域;S202:所述第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致所 述第一內(nèi)存區(qū)域不穩(wěn)定的空洞,所述第二內(nèi)存塊位于所述第二內(nèi)存區(qū)域中。本發(fā)明實施例提供的內(nèi)存管理方法,通過劃分第二內(nèi)存區(qū)域作為輔助區(qū)域,利用 局部壓縮算法管理第一內(nèi)存區(qū)域時,當(dāng)?shù)谝粌?nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,從第二內(nèi)存區(qū)域 中取出長度合適的第二內(nèi)存塊的數(shù)據(jù)來填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,由于僅需要 搬移導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞大小的內(nèi)存空間,該空洞的長度通常較小,從而大大 減少內(nèi)存的搬移量,使得第一內(nèi)存區(qū)域能夠快速的恢復(fù)到穩(wěn)定狀態(tài),進而在保證內(nèi)存利用 率較高的情況下,進一步提高局部壓縮算法的內(nèi)存管理性能,從而使得局部壓縮算法能夠 較好的同時兼顧到內(nèi)存利用率和內(nèi)存管理性能。參見圖3,本發(fā)明實施例提供另一種內(nèi)存管理方法,包括如下步驟S301 將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,采用局部壓縮算法管理第一 內(nèi)存區(qū)域;其中,劃分出來第二內(nèi)存區(qū)域作為輔助區(qū)域,用來輔助第一內(nèi)存區(qū)域能夠盡快的 由不穩(wěn)定狀態(tài)恢復(fù)到穩(wěn)定狀態(tài)。相對第一內(nèi)存區(qū)域而言,作為輔助區(qū)域的第二內(nèi)存區(qū)域的 空間通常很小,比如第二內(nèi)存區(qū)域的長度可以是第一內(nèi)存區(qū)域的左右。S302 當(dāng)接收到內(nèi)存申請時,優(yōu)先在第二內(nèi)存區(qū)域中進行分配;當(dāng)接收到內(nèi)存申請時,可以隨機在第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域中進行分配,優(yōu) 先的,本實施例優(yōu)先在第二內(nèi)存區(qū)域中進行分配,在本實施例中并不限制在第二內(nèi)存區(qū)域
8中進行內(nèi)存分配的具體手段,已知的內(nèi)存分配手段均可以應(yīng)用。S303:所述第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致所 述第一內(nèi)存區(qū)域不穩(wěn)定的空洞,該第二內(nèi)存塊位于所述第二內(nèi)存區(qū)域中。其中,判斷導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞的方法包括判斷如果第一內(nèi)存區(qū)域中數(shù)據(jù)段的長度小于調(diào)節(jié)因子與預(yù)設(shè)值的乘積,且該數(shù)據(jù) 段后的空洞長度小于預(yù)設(shè)值,則該空洞為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞;上述預(yù)設(shè)值為 預(yù)先設(shè)定的單次申請內(nèi)存或單次釋放內(nèi)存的最大長度值。當(dāng)用第二內(nèi)存塊中的數(shù)據(jù)填充空洞之后,還包括再次判斷第一內(nèi)存區(qū)域是否恢復(fù) 穩(wěn)定狀態(tài),否則再次在第二內(nèi)存區(qū)域中取出合適長度的第二內(nèi)存塊中的數(shù)據(jù)來填充導(dǎo)致第 一內(nèi)存區(qū)域不穩(wěn)定的空洞,直至第一內(nèi)存區(qū)域處于穩(wěn)定狀態(tài)為止。當(dāng)取出第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞后,被取出數(shù)據(jù) 的第二內(nèi)存塊的狀態(tài)便會恢復(fù)到未使用狀態(tài),此時,當(dāng)再次有內(nèi)存申請時,可以被重新分 配。可見,本發(fā)明實施例提供的內(nèi)存管理方法,通過劃分第二內(nèi)存區(qū)域作為輔助區(qū)域, 利用局部壓縮算法管理第一內(nèi)存區(qū)域時,當(dāng)?shù)谝粌?nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,從第二內(nèi)存 區(qū)域中取出長度合適的第二內(nèi)存塊的數(shù)據(jù)來填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,由于僅 需要搬移導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞大小的內(nèi)存空間,該空洞的長度通常較小,從而 大大減少內(nèi)存的搬移量,使得第一內(nèi)存區(qū)域能夠快速的恢復(fù)到穩(wěn)定狀態(tài),進而在保證內(nèi)存 利用率較高的情況下,進一步提高局部壓縮算法的內(nèi)存管理性能,從而使得局部壓縮算法 能夠較好的同時兼顧到內(nèi)存利用率和內(nèi)存管理性能。另外,當(dāng)有內(nèi)存申請時,優(yōu)先在第二內(nèi)存區(qū)域中進行分配,當(dāng)?shù)诙?nèi)存區(qū)域空間不 夠時再在第一內(nèi)存區(qū)域中進行分配,這樣,可以使得第二內(nèi)存區(qū)域能夠有更多的數(shù)據(jù)用于 填充,更大程度的提高內(nèi)存管理性能。參見圖4,本發(fā)明實施例提供另一種內(nèi)存管理方法,包括如下步驟S401 將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,采用局部壓縮算法管理第一 內(nèi)存區(qū)域;其中,劃分出來第二內(nèi)存區(qū)域作為輔助區(qū)域,用來輔助第一內(nèi)存區(qū)域能夠盡快的 由不穩(wěn)定狀態(tài)恢復(fù)到穩(wěn)定狀態(tài)。相對第一內(nèi)存區(qū)域而言,作為輔助區(qū)域的第二內(nèi)存區(qū)域的 空間通常很小。S402 在第二內(nèi)存區(qū)域中創(chuàng)建至少一頁,并管理所述頁的頁信息;其中每頁由長 度相等的至少一個第二內(nèi)存塊連續(xù)排列組成,第二內(nèi)存塊的長度小于或等于預(yù)設(shè)值W;其中,預(yù)設(shè)值W為預(yù)先設(shè)定的單次申請內(nèi)存或單次釋放內(nèi)存的最大長度,可以根 據(jù)具體的應(yīng)用場合預(yù)先設(shè)定。結(jié)合參見圖5,第一內(nèi)存區(qū)域中將大小不等的第一內(nèi)存塊混放在一起,利用局部壓 縮算法管理第一內(nèi)存區(qū)域,當(dāng)混放的第一內(nèi)存區(qū)域滿足數(shù)據(jù)段的長度大于或等于KW ;或 數(shù)據(jù)段后的空洞長度大于或等于W時,第一內(nèi)存區(qū)域處于穩(wěn)定狀態(tài),其中K為調(diào)節(jié)因子,為 ^ 1的整數(shù)。其中第一內(nèi)存區(qū)域中沒有被分配使用的空間為空洞,相鄰兩個空洞之間已經(jīng) 被分配使用的空間即寫有數(shù)據(jù)的區(qū)域就是數(shù)據(jù)段,該寫有數(shù)據(jù)的區(qū)域可以由連續(xù)的至少一 個第一內(nèi)存塊構(gòu)成。
在第一內(nèi)存區(qū)域外的內(nèi)存區(qū)域中另外劃分一部分空間,為第二內(nèi)存區(qū)域,在其中 創(chuàng)建η頁,其中η為整數(shù)且η ^ 1,本實施例中選取η大于1,每頁中連續(xù)排列至少一個第二 內(nèi)存塊,且每頁中的第二內(nèi)存塊長度相等,但,不同頁的第二內(nèi)存塊的長度可以不相等。如 頁1中包括dl個長度相等的第二內(nèi)存塊1,長度為Li,頁m中包括dm個第二內(nèi)存塊m,長度 為Lm,頁η中包括dn個大小相等的第二內(nèi)存塊n,長度為Ln,其中m為小于η大于1的整 數(shù),Li、Lm和Ln可以相等,也可以不相等;dl、dm、dn可以是一個,也可以是多個,本實施例 中選取每頁中的第二內(nèi)存塊的個數(shù)為多個。管理每頁的頁信息,包括每頁的頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系、和第二 內(nèi)存塊的狀態(tài)信息(空閑狀態(tài)或非空閑狀態(tài))等。S403:當(dāng)接收到內(nèi)存申請時,判斷是否有與本次申請內(nèi)存段長度相等的第二內(nèi)存 塊長度,是則執(zhí)行步驟S406 ;否則執(zhí)行步驟S404 ;S404:判斷是否有大于本次申請內(nèi)存段長度的第二內(nèi)存塊長度,是則執(zhí)行步驟 S406,否則執(zhí)行步驟S405 ;S405 在第一內(nèi)存區(qū)域中進行分配,執(zhí)行步驟S407。S406:依據(jù)所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度 對應(yīng)的頁首地址,并依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在獲取的頁首地址對應(yīng)的頁內(nèi)分配 處于空閑狀態(tài)的第二內(nèi)存塊。比如,假設(shè)在劃分的第二內(nèi)存區(qū)域中,創(chuàng)建3頁,頁1中連續(xù)排列有5個長度均為1 的第二內(nèi)存塊,頁2中連續(xù)排列有4個長度均為2的第二內(nèi)存塊,頁3中連續(xù)排列有6個長 度均為4的第二內(nèi)存塊,當(dāng)申請長度為2的內(nèi)存段時,經(jīng)判斷有等于2的第二內(nèi)存塊長度, 依據(jù)管理的頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取到該第二內(nèi)存塊長度對應(yīng)的頁首 地址為頁2的頁首地址,依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在頁2中分配一個處于空閑狀態(tài) 的第二內(nèi)存塊供使用;如果申請長度為3的內(nèi)存段時,經(jīng)判斷沒有等于3的第二內(nèi)存長度, 則再去判斷是否有大于3的第二內(nèi)存塊長度,經(jīng)判斷有長度為4的第二內(nèi)存塊長度,依據(jù)管 理的頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取到該第二內(nèi)存塊長度對應(yīng)的頁首地址為 頁3的頁首地址,依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在頁3中分配一個處于空閑狀態(tài)的第二 內(nèi)存塊供使用;當(dāng)申請長度為5的內(nèi)存段時,經(jīng)判斷沒有等于或大于5的第二內(nèi)存長度,則 在第一內(nèi)存區(qū)域中進行分配。當(dāng)分配某個第二內(nèi)存塊供使用后,需要修改相應(yīng)的頁信息,將被分配的第二內(nèi)存 塊的狀態(tài)信息修改為非空閑狀態(tài),以便實現(xiàn)頁信息的有效管理。上述步驟S403 S406實現(xiàn)的是當(dāng)接收到內(nèi)存申請時,優(yōu)先在第二內(nèi)存區(qū)域中分 配第二內(nèi)存塊的方法,在實際應(yīng)用中不僅僅限于上述分配方法,只要能實現(xiàn)優(yōu)先在第二內(nèi) 存區(qū)域中進行分配的方法均可。S407:當(dāng)?shù)谝粌?nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致所述 第一內(nèi)存區(qū)域不穩(wěn)定的空洞。由于第一內(nèi)存區(qū)域中大小不等的第一內(nèi)存塊都是混放的,且由于第一內(nèi)存區(qū)域一 般都很大,通常很難實現(xiàn)對每個第一內(nèi)存塊的地址和長度等信息進行有效的管理和維護; 而第二內(nèi)存區(qū)域作為第一內(nèi)存區(qū)域的輔助區(qū)域,通常而言其空間較小,因此,比較容易實現(xiàn) 對第二內(nèi)存區(qū)域中的相關(guān)信息進行有效的管理和維護,比如頁信息的維護和管理等,這樣,便可以在第二內(nèi)存區(qū)域中快速的找到合適大小的第二內(nèi)存塊,用于填充導(dǎo)致第一內(nèi)存區(qū)域 不穩(wěn)定的空洞,使得第一內(nèi)存區(qū)域可以快速的恢復(fù)到穩(wěn)定狀態(tài),進而提高局部壓縮算法的 內(nèi)存管理性能。其中,判斷第一內(nèi)存區(qū)域是否處于不穩(wěn)定狀態(tài)的方法可以是判斷如果第一內(nèi)存區(qū)域中數(shù)據(jù)段的長度小于調(diào)節(jié)因子K與預(yù)設(shè)值W的乘積,且該 數(shù)據(jù)段后的空洞長度小于預(yù)設(shè)值W,則第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)。具體而言,當(dāng)在第一內(nèi)存區(qū)域中有內(nèi)存分配或有內(nèi)存釋放時,第一內(nèi)存區(qū)域中會 產(chǎn)生新的數(shù)據(jù)段和新的空洞,當(dāng)新的數(shù)據(jù)段的長度小于調(diào)節(jié)因子K與預(yù)設(shè)值W的乘積,且該 新的數(shù)據(jù)段后的空洞長度也小于預(yù)設(shè)值W,則此時第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài),該長度小 于預(yù)設(shè)值W的空洞為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞。其中,判斷導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞的方法包括判斷如果第一內(nèi)存區(qū)域中數(shù)據(jù)段的長度小于調(diào)節(jié)因子與預(yù)設(shè)值的乘積,且該數(shù)據(jù) 段后的空洞長度小于預(yù)設(shè)值,則該空洞為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞;上述預(yù)設(shè)值為 預(yù)先設(shè)定的單次申請內(nèi)存或單次釋放內(nèi)存的最大長度值。在實際應(yīng)用中,如果存在兩個空 洞,當(dāng)填充其中任何一個均可以使得第一內(nèi)存區(qū)域恢復(fù)穩(wěn)定狀態(tài)的話,優(yōu)選的可以選擇長 度小的空洞作為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,以便進一步的減小內(nèi)存搬移量,進一步 提高局部壓縮算法的內(nèi)存管理性能。比如,參見圖5-1,在第一內(nèi)存區(qū)域的數(shù)據(jù)段1的中部釋放內(nèi)存空間k,此時產(chǎn)生新 的數(shù)據(jù)段Ia和數(shù)據(jù)段lb,及新的空洞0,則判斷如果空洞0的長度小于W,且數(shù)據(jù)段Ia的長 度小于KW,則空洞0為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞;或者,判斷如果數(shù)據(jù)段Ib的長度小于KW,且空洞1的長度小于W(假設(shè)數(shù)據(jù)段Ia 的長度大于KW),則空洞0或空洞1為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,優(yōu)選的,可以選擇長 度小空洞作為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞。參見圖5-2,在第一內(nèi)存區(qū)域的數(shù)據(jù)段2的前端釋放內(nèi)存空間U,此時,空間u與其 相鄰的空洞1合并形成新的空洞la,及新的數(shù)據(jù)段2a,判斷如果數(shù)據(jù)段2a的長度小于KW, 且空洞2的長度小于W,則空洞2或空間u為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,優(yōu)選的,可以 選擇兩者中長度較小的作為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞。參見圖5-3,在第一內(nèi)存區(qū)域的數(shù)據(jù)段1的后端釋放內(nèi)存空間E,此時,空間E與其 相鄰的空洞1合并形成新的空洞la,和新的數(shù)據(jù)段la,判斷如果數(shù)據(jù)段Ia的長度小于KW, 且空洞Ia的長度小于W,則空洞Ia或空間E為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,優(yōu)選的,可 以選擇兩者中長度小的作為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞。參見圖5-4,在第一內(nèi)存區(qū)域的空洞1中部分配空間m,此時形成新的數(shù)據(jù)段M,空 洞Ia和空洞lb,判斷如果空洞Ia的長度小于W,且數(shù)據(jù)段1的長度小于KW,則空洞Ia為導(dǎo) 致第一內(nèi)存區(qū)域不穩(wěn)定的空洞;如果數(shù)據(jù)段1、空洞Ia和數(shù)據(jù)段M的長度之和小于KW,且空洞Ib也小于W的話, 則空洞Ib也是導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,即如果數(shù)據(jù)段1、空洞Ia和數(shù)據(jù)段M的長 度之和小于KW且空洞Ib也小于W,則空洞Ia和空洞Ib都是導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空 洞,此時需要將空洞Ia和空洞Ib都進行填充才能使得第一內(nèi)存區(qū)域恢復(fù)到穩(wěn)定狀態(tài)。參見圖5-5,在第一內(nèi)存區(qū)域的空洞1的前端分配空間n,此時空間η與其相鄰的數(shù)據(jù)段1合并形成新的數(shù)據(jù)段la,和新的空洞la,判斷如果數(shù)據(jù)段Ia的長度小于KW,且空 洞Ia的長度小于W,則空洞Ia為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞。參見圖5-6,在第一內(nèi)存區(qū)域的空洞1的后端分配空間h,此時空間h與其相鄰的 數(shù)據(jù)段2合并形成新的數(shù)據(jù)段2a,和新的空洞la,判斷如果數(shù)據(jù)段1的長度小于KW,且空洞 Ia的長度小于W,則空洞Ia為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞。優(yōu)選的,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞的方法可以 是判斷是否有與導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞長度相等的第二內(nèi)存塊長度,是則 依據(jù)所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng)的頁首地 址;依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在所述頁首地址對應(yīng)的頁內(nèi),取出處于非空閑狀態(tài)的 第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞;或判斷是否有多個第二內(nèi)存塊長度之和等于導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞長度, 是則依據(jù)等于所述空洞長度所需的第二內(nèi)存塊長度與個數(shù)的對應(yīng)規(guī)則,和所述頁首地址與 第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該多個第二內(nèi)存塊長度分別對應(yīng)的至少一個頁首地址; 依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在該至少一個頁首地址對應(yīng)的頁內(nèi),取出相應(yīng)長度和個 數(shù)的處于非空閑狀態(tài)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞。結(jié)合參見圖6,當(dāng)有內(nèi)存申請時,假設(shè)在空洞1中分配第一內(nèi)存塊F供使用,此時產(chǎn) 生新的數(shù)據(jù)段0,和新的空洞10、空洞11。通過判斷,空洞10前面的數(shù)據(jù)段1的長度大于 KW,而如果空洞11前面的數(shù)據(jù)段0的長度小于KW(每次申請內(nèi)存的最大長度為W,K 一般為 ^ 1的整數(shù)),如果空洞11的長度小于W,則空洞11為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,即 此時第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)。假設(shè),經(jīng)判斷,第二內(nèi)存塊長度Lm與導(dǎo)致第一內(nèi)存不 穩(wěn)定的空洞11的長度相等,則依據(jù)所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第 二內(nèi)存塊長度Lm對應(yīng)的頁首地址為頁m的頁首地址;依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在 該頁首地址對應(yīng)的頁m內(nèi),取出處于非空閑狀態(tài)的第二內(nèi)存塊中的數(shù)據(jù),填充空洞11。當(dāng) 然,也可以有多個第二內(nèi)存塊長度之和等于空洞11時,用該多個第二內(nèi)存塊中的數(shù)據(jù)來填 充空洞11。結(jié)合參見圖7,當(dāng)有內(nèi)存釋放時,在數(shù)據(jù)段1中釋放空間Z,該空間Z包括至少一個 第一內(nèi)存塊,此時生成新的空洞C,數(shù)據(jù)段10和數(shù)據(jù)段11,如果數(shù)據(jù)段10的長度小于KW, 并且空洞C的長度小于W,則通過判斷可知,空洞C為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,即 此時第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)。假設(shè),經(jīng)判斷,2個第二內(nèi)存塊長度Ll與1個第二內(nèi) 存塊長度Lm之和,等于導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞C的長度,則依據(jù)所述頁首地址與 第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該3個第二內(nèi)存塊長度分別對應(yīng)的頁首地址頁1的頁首 地址和頁m的頁首地址;依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在頁1的頁首地址和頁m的頁首 地址對應(yīng)的頁1和頁m內(nèi),依據(jù)上述對應(yīng)規(guī)則(即長度Ll與數(shù)量2對應(yīng),及Lm與數(shù)量1對 應(yīng)),在頁1中取出2個處于非空閑狀態(tài)的第二內(nèi)存塊中的數(shù)據(jù),和在頁m中取出1個處于 費空閑狀態(tài)的第二內(nèi)存塊中的數(shù)據(jù),一并填充導(dǎo)致空洞C中。當(dāng)然,也可以有與空洞C長度 相等的第二內(nèi)存塊長度時,用該一個第二內(nèi)存塊中的數(shù)據(jù)來填充空洞C。現(xiàn)有技術(shù)中,當(dāng)?shù)谝粌?nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,無法從現(xiàn)有的第一內(nèi)存區(qū)域中 快速的找到合適大小的內(nèi)存空間進行搬移,而往往一次搬移并不能使得第一內(nèi)存區(qū)域達到
12穩(wěn)定,常常是需要經(jīng)過多次的搬移才能使得第一內(nèi)存區(qū)域重新達到穩(wěn)定,對于內(nèi)存利用率 越高的情況,這種搬移的次數(shù)會相應(yīng)的增多,因此內(nèi)存的管理性能相對越低。而采用本發(fā)明實施例提供的這種填充方式,可以減小內(nèi)存的搬移量,而使得第一 內(nèi)存區(qū)域能夠快速的恢復(fù)到穩(wěn)定狀態(tài),從而可以在不損失內(nèi)存利用率的情況下,大大的提 高內(nèi)存的管理性能。當(dāng)用至少一個所述第二內(nèi)存塊中的數(shù)據(jù)填充空洞之后,還包括再次判斷第一內(nèi)存 區(qū)域是否恢復(fù)穩(wěn)定狀態(tài),否則再次在第二內(nèi)存區(qū)域中取出合適長度的第二內(nèi)存塊中的數(shù)據(jù) 來填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,直至第一內(nèi)存區(qū)域處于穩(wěn)定狀態(tài)為止。其中,判斷第一內(nèi)存區(qū)域是否恢復(fù)穩(wěn)定狀態(tài)的方法包括判斷數(shù)據(jù)段的長度是否大于或等于調(diào)節(jié)因子乘以預(yù)設(shè)值,是則內(nèi)存恢復(fù)穩(wěn)定狀 態(tài);否則判斷該數(shù)據(jù)段后的空洞長度是否大于或等于所述預(yù)設(shè)值,是則內(nèi)存恢復(fù)穩(wěn)定 狀態(tài)。當(dāng)取出第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞后,被取出數(shù)據(jù) 的第二內(nèi)存塊的狀態(tài)便會恢復(fù)空閑狀態(tài),此時,需要修改相應(yīng)的頁信息,將其狀態(tài)修改為空 閑狀態(tài),當(dāng)再次有內(nèi)存申請時,便可以被重新分配。其中,優(yōu)先在第二內(nèi)存區(qū)域進行分配的步驟S403 S406,與填充的步驟S407之間 沒有嚴(yán)格的順序限定,當(dāng)接收到內(nèi)存申請時,便執(zhí)行步驟S403 S406,當(dāng)?shù)谝粌?nèi)存區(qū)域處 于不穩(wěn)定狀態(tài)時,便執(zhí)行步驟S407,優(yōu)先在第二內(nèi)存區(qū)域進行分配的步驟和填充的步驟,其 順序和執(zhí)行次數(shù)在這里不做限制。本發(fā)明實施例提供的內(nèi)存管理方法,通過劃分第二內(nèi)存區(qū)域作為輔助區(qū)域,利用 局部壓縮算法管理第一內(nèi)存區(qū)域時,當(dāng)?shù)谝粌?nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,從第二內(nèi)存區(qū)域 中取出長度合適的第二內(nèi)存塊中數(shù)據(jù)來填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,由于僅需要 搬移導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞大小的內(nèi)存空間,該空洞的長度通常較小,從而大大 減少內(nèi)存的搬移量,使得第一內(nèi)存區(qū)域能夠快速的恢復(fù)到穩(wěn)定狀態(tài),進而在保證內(nèi)存利用 率較高的情況下,進一步提高局部壓縮算法的內(nèi)存管理性能,從而使得局部壓縮算法能夠 較好的同時兼顧到內(nèi)存利用率和內(nèi)存管理性能。另外,在實施本發(fā)明過程中,發(fā)明人還發(fā)現(xiàn)現(xiàn)有技術(shù)中另外還存在如下問題采用 局部壓縮算法進行內(nèi)存管理時,一般還會存在申請空間和釋放空間性能不一致的問題,具 體而言,局部壓縮算法中釋放空間比申請空間會造成更多的內(nèi)存搬移,即釋放空間的性能 遠低于申請空間的性能,比如,對于在路由器上運行路由查找算法的應(yīng)用場合而言,采用局 部壓縮算法進行內(nèi)存管理時,會出現(xiàn)刪除表項的性能遠低于添加表項的性能。采用本發(fā)明 實施例提供的內(nèi)存管理方法,在釋放空間時,可以直接取出長度合適的第二內(nèi)存塊中的數(shù) 據(jù)填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,從而大大減少了釋放內(nèi)存時大量的內(nèi)存搬移,進 一步的解決了局部壓縮算法中申請空間和釋放空間性能不一致的問題。參見圖8,本發(fā)明實施例提供另一種內(nèi)存管理方法,包括如下步驟S801 將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,采用局部壓縮算法管理第一 內(nèi)存區(qū)域。其中,劃分出來第二內(nèi)存區(qū)域作為輔助區(qū)域,用來輔助第一內(nèi)存區(qū)域能夠盡快的由不穩(wěn)定狀態(tài)恢復(fù)到穩(wěn)定狀態(tài)。相對第一內(nèi)存區(qū)域而言,作為輔助區(qū)域的第二內(nèi)存區(qū)域的 空間通常很小。S802 在該第二內(nèi)存區(qū)域內(nèi)創(chuàng)建W頁,每頁由長度相等的至少一個第二內(nèi)存塊連 續(xù)排列組成,其中頁1中的第二內(nèi)存塊1的長度為1,頁2中的第二內(nèi)存塊2的長度為2,依 次類推,頁W中的第二內(nèi)存塊W的長度為W(本實施例中W為大于2的整數(shù));其中W為預(yù) 先設(shè)定的單次申請/釋放內(nèi)存區(qū)域的最大長度,該最大長度可以根據(jù)具體的應(yīng)用場合預(yù)先 設(shè)定。并管理每頁的頁信息,包括頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系、和第二內(nèi)存 塊的狀態(tài)信息(空閑狀態(tài)或非空閑狀態(tài))等。S803:當(dāng)接收到內(nèi)存申請時,假設(shè)本次申請的內(nèi)存段長度為L,則判斷頁L中是否 有處于空閑狀態(tài)的第二內(nèi)存塊(其中頁L中的第二內(nèi)存塊的長度等于L),如果有,則分配頁 L中任一空閑的第二內(nèi)存塊供使用,并修改該第二內(nèi)存塊的狀態(tài)信息為非空閑狀態(tài),如果沒 有則在第一內(nèi)存區(qū)域進行分配。S804:當(dāng)?shù)谝粌?nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,假設(shè)導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞 的長度為R,則根據(jù)上述頁信息判斷頁R中是否有處于非空閑狀態(tài)的第二內(nèi)存塊(其中頁R 中的第二內(nèi)存塊的長度等于R),如果有,則用頁R中的任一非空閑的第二內(nèi)存塊中的數(shù)據(jù) 填充該空洞。當(dāng)用第二內(nèi)存塊中的數(shù)據(jù)填充空洞之后,還包括再次判斷第一內(nèi)存區(qū)域是否恢復(fù) 穩(wěn)定狀態(tài),否則再次在第二內(nèi)存區(qū)域中取出合適長度的第二內(nèi)存塊中的數(shù)據(jù)來填充導(dǎo)致第 一內(nèi)存區(qū)域不穩(wěn)定的空洞,直至第一內(nèi)存區(qū)域處于穩(wěn)定狀態(tài)為止。當(dāng)取出第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞后,被取出數(shù)據(jù) 的第二內(nèi)存塊的狀態(tài)便會恢復(fù)空閑狀態(tài),此時,需要修改相應(yīng)的頁信息,將其狀態(tài)修改為空 閑狀態(tài),當(dāng)再次有內(nèi)存申請時,便可以被重新分配。本發(fā)明實施例提供的內(nèi)存管理方法,通過劃分包括W頁的第二內(nèi)存區(qū)域,在申請 內(nèi)存時優(yōu)先分配該W頁中對應(yīng)長度的第二內(nèi)存塊,當(dāng)?shù)谝粌?nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,從 具有長度合適的第二內(nèi)存塊的頁中,取出任一第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致第一內(nèi)存區(qū) 域不穩(wěn)定的空洞,由于僅需要搬移導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞大小的內(nèi)存空間,該空 洞的長度通常較小,從而大大減少內(nèi)存的搬移量,使得內(nèi)存能夠快速的恢復(fù)到穩(wěn)定狀態(tài),進 而在保證內(nèi)存利用率較高的情況下,進一步提高局部壓縮算法的內(nèi)存管理性能,從而使得 局部壓縮算法能夠較好的同時兼顧到內(nèi)存利用率和內(nèi)存管理性能;同時,本發(fā)明實施例中, 在有內(nèi)存分配和填充時,都是直接到具有合適長度第二內(nèi)存塊的頁中進行分配或取數(shù)據(jù)進 行填充,這種方式使得第二內(nèi)存區(qū)域的維護和管理非常簡單便捷。參見圖9,本發(fā)明實施例提供再一種內(nèi)存管理方法,包括如下步驟S901 將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,采用局部壓縮算法管理第一 內(nèi)存區(qū)域。其中,劃分出來第二內(nèi)存區(qū)域作為輔助區(qū)域,用來輔助第一內(nèi)存區(qū)域能夠盡快的 由不穩(wěn)定狀態(tài)恢復(fù)到穩(wěn)定狀態(tài)。相對第一內(nèi)存區(qū)域而言,作為輔助區(qū)域的第二內(nèi)存區(qū)域的 空間通常很小。S902:當(dāng)接收到內(nèi)存申請時,判斷所述第二內(nèi)存區(qū)域中是否有大于或等于本次申請內(nèi)存段長度的空洞,是則在所述空洞中進行分配,生成新的第二內(nèi)存塊,并管理所述第二 內(nèi)存塊長度和地址的對應(yīng)關(guān)系;劃分出來的第二內(nèi)存區(qū)域在初始時整個區(qū)域是個大的空洞,整個區(qū)域均處于未被 使用的狀態(tài),當(dāng)有內(nèi)存申請時,優(yōu)先在第二內(nèi)存區(qū)域中進行分配,分配時先判斷該第二內(nèi)存 區(qū)域中是否有大于或等于本次申請內(nèi)存段長度的空洞,是則在滿足長度的任一空洞中進行 能夠分配,被分配的區(qū)域形成一個新的第二內(nèi)存塊。由于第二內(nèi)存區(qū)域是輔助區(qū)域,其空間相對第一內(nèi)存區(qū)域而言通常很小,因此,能 夠?qū)崿F(xiàn)對第二內(nèi)存塊的長度和地址信息進行有效的管理和維護,即能夠有效的實現(xiàn)對第二 內(nèi)存塊長度和地址的對應(yīng)關(guān)系等進行管理。S903:第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用長度合適的第二內(nèi)存塊中的數(shù)據(jù)填充 導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞。其中,判斷導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞的方法包括判斷如果第一內(nèi)存區(qū)域中數(shù)據(jù)段的長度小于調(diào)節(jié)因子與預(yù)設(shè)值的乘積,且該數(shù)據(jù) 段后的空洞長度小于預(yù)設(shè)值,則該空洞為導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞;上述預(yù)設(shè)值為 預(yù)先設(shè)定的單次申請內(nèi)存或單次釋放內(nèi)存的最大長度值。優(yōu)選的,用長度合適的第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的 空洞的方法可以是判斷是否有與導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞長度相等的第二內(nèi)存塊長度,是則 依據(jù)所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng)的地址,取出所 述地址對應(yīng)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞;或判斷是否有多個第二內(nèi)存塊長度之和等于導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞的長 度,是則依據(jù)所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系,獲取該多個第二內(nèi)存塊長度分別對 應(yīng)的多個地址;取出該多個地址對應(yīng)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域 不穩(wěn)定的空洞。當(dāng)用第二內(nèi)存塊中的數(shù)據(jù)填充空洞之后,還包括再次判斷第一內(nèi)存區(qū)域是否恢復(fù) 穩(wěn)定狀態(tài),否則再次在第二內(nèi)存區(qū)域中取出合適長度的第二內(nèi)存塊中的數(shù)據(jù)來填充導(dǎo)致第 一內(nèi)存區(qū)域不穩(wěn)定的空洞,直至第一內(nèi)存區(qū)域處于穩(wěn)定狀態(tài)為止。當(dāng)取出第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞后,被取出數(shù)據(jù) 的第二內(nèi)存塊便重新成為空洞,即重新處于未被使用狀態(tài),此時,當(dāng)再次有內(nèi)存申請時,可 以被重新分配。其中,步驟S902和步驟S903之間沒有嚴(yán)格的順序限定,當(dāng)接收到內(nèi)存申請時,便 執(zhí)行步驟S902,當(dāng)判斷第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,便執(zhí)行步驟S903,步驟S902和步 驟S903其順序和執(zhí)行的次數(shù)在這里不做限制。本發(fā)明實施例提供的內(nèi)存管理方法,通過劃分第二內(nèi)存區(qū)域作為輔助區(qū)域,利用 局部壓縮算法管理第一內(nèi)存區(qū)域時,當(dāng)?shù)谝粌?nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,從第二內(nèi)存區(qū)域 中取出長度合適的第二內(nèi)存塊的數(shù)據(jù)來填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,由于僅需要 搬移導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞大小的內(nèi)存空間,該空洞的長度通常較小,從而大大 減少內(nèi)存的搬移量,使得第一內(nèi)存區(qū)域能夠快速的恢復(fù)到穩(wěn)定狀態(tài),進而在保證內(nèi)存利用 率較高的情況下,進一步提高局部壓縮算法的內(nèi)存管理性能,從而使得局部壓縮算法能夠較好的同時兼顧到內(nèi)存利用率和內(nèi)存管理性能。另外,在實施本發(fā)明過程中,發(fā)明人還發(fā)現(xiàn)現(xiàn)有技術(shù)中另外還存在如下問題采用 局部壓縮算法進行內(nèi)存管理時,一般還會存在申請空間和釋放空間性能不一致的問題,具 體而言,局部壓縮算法中釋放空間比申請空間會造成更多的內(nèi)存搬移,即釋放空間的性能 遠低于申請空間的性能,比如,對于在路由器上運行路由查找算法的應(yīng)用場合而言,采用局 部壓縮算法進行內(nèi)存管理時,會出現(xiàn)刪除表項的性能遠低于添加表項的性能。采用本發(fā)明 實施例提供的內(nèi)存管理方法,在釋放空間時,可以直接取出長度合適的第二內(nèi)存塊中的數(shù) 據(jù)填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,從而大大減少了釋放內(nèi)存時大量的內(nèi)存搬移,進 一步的解決了局部壓縮算法中申請空間和釋放空間性能不一致的問題。參見圖10,本發(fā)明實施例提供一種內(nèi)存管理系統(tǒng),包括劃分模塊1001,用于將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域;管理模塊1002,用于采用局部壓縮算法管理第一內(nèi)存區(qū)域;填充模塊1003,用于所述第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用第二內(nèi)存塊中的數(shù) 據(jù)填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞,所述第二內(nèi)存塊位于所述第二內(nèi)存區(qū)域中。其中,劃分出來第二內(nèi)存區(qū)域作為輔助區(qū)域,用來輔助第一內(nèi)存區(qū)域能夠盡快的 由不穩(wěn)定狀態(tài)恢復(fù)到穩(wěn)定狀態(tài)。相對第一內(nèi)存區(qū)域而言,作為輔助區(qū)域的第二內(nèi)存區(qū)域的 空間通常很小。本發(fā)明實施例提供的內(nèi)存管理系統(tǒng),通過劃分模塊1001劃分的第二內(nèi)存區(qū)域作 為輔助區(qū)域,填充模塊1003在第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,從第二內(nèi)存區(qū)域中取出長 度合適的第二內(nèi)存塊的數(shù)據(jù)來填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,由于僅需要搬移導(dǎo)致 第一內(nèi)存區(qū)域不穩(wěn)定的空洞大小的內(nèi)存空間,該空洞的長度通常較小,從而大大減少內(nèi)存 的搬移量,使得第一內(nèi)存區(qū)域能夠快速的恢復(fù)到穩(wěn)定狀態(tài),進而在保證內(nèi)存利用率較高的 情況下,進一步提高局部壓縮算法的內(nèi)存管理性能,從而使得局部壓縮算法能夠較好的同 時兼顧到內(nèi)存利用率和內(nèi)存管理性能。參見圖11,在本發(fā)明的另一實施例中,所述系統(tǒng)還包括優(yōu)先分配模塊1101,用于 當(dāng)接收到內(nèi)存申請時,優(yōu)先在所述第二內(nèi)存區(qū)域中進行分配。本實施例中,內(nèi)存申請時優(yōu)先在第二內(nèi)存區(qū)域中進行分配,當(dāng)?shù)诙?nèi)存區(qū)域空間 不夠時再在第一內(nèi)存區(qū)域中進行分配,這樣,可以使得第二內(nèi)存區(qū)域能夠有更多的數(shù)據(jù)用 于填充,更大程度的提高內(nèi)存管理性能。參見圖12,在本發(fā)明的另一實施例中,劃分模塊1001進一步包括頁創(chuàng)建單元,用于在所述第二內(nèi)存區(qū)域中創(chuàng)建至少一頁,其中每頁由長度相等的 至少一個第二內(nèi)存塊連續(xù)排列組成,所述第二內(nèi)存塊的長度小于或等于預(yù)先設(shè)定的單次申 請內(nèi)存或單次釋放內(nèi)存的最大長度;頁管理單元,用于管理所述頁創(chuàng)建單元創(chuàng)建的頁的頁信息,包括每頁的頁首地址 與第二內(nèi)存塊長度的對應(yīng)關(guān)系、和第二內(nèi)存塊的狀態(tài)信息(空閑狀態(tài)或非空閑狀態(tài))等。優(yōu)先分配模塊1101具體包括第一判斷單元1201,用于判斷是否有與本次申請內(nèi)存段長度相等的第二內(nèi)存塊長 度,是則依據(jù)所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng)的 頁首地址;
16
第二判斷單元1202,用于在所述第一判斷單元1201的判斷結(jié)果為否時,判斷是否 有大于本次申請內(nèi)存段長度的第二內(nèi)存塊長度,是則依據(jù)所述頁首地址與第二內(nèi)存塊長度 的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng)的頁首地址;頁分配單元1203,用于依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在所述第一判斷單元 1201或第二判斷單元1202獲取的頁首地址對應(yīng)的頁內(nèi),分配處于空閑狀態(tài)的第二內(nèi)存塊。相應(yīng)的,所述填充模塊1003包括第一填充單元,用于判斷是否有與導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞長度相等的第 二內(nèi)存塊長度,是則依據(jù)所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊 長度對應(yīng)的頁首地址;依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在所述頁首地址對應(yīng)的頁內(nèi),取出 處于非空閑狀態(tài)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞;或第二填充單元,用于判斷是否有多個第二內(nèi)存塊長度之和等于導(dǎo)致第一內(nèi)存區(qū)域 不穩(wěn)定的空洞長度,是則依據(jù)等于所述空洞長度所需的第二內(nèi)存塊長度與該第二內(nèi)存塊個 數(shù)的對應(yīng)規(guī)則,和所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該多個第二內(nèi)存塊長 度分別對應(yīng)的至少一個頁首地址;依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在該至少一個頁首地 址對應(yīng)的頁內(nèi),取出相應(yīng)長度和個數(shù)的處于非空閑狀態(tài)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致 所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞。該實施例中提供的分配模塊1001中,通過創(chuàng)建頁來維護和管理第二內(nèi)存區(qū)域,這 種方式使得第二內(nèi)存區(qū)域的維護和管理非常簡單便捷。參見圖13,在本發(fā)明的再一個實施例中,所述優(yōu)先分配模塊1101具體包括混放分配單元1301,用于判斷所述第二內(nèi)存區(qū)域中有大于或等于本次申請內(nèi)存段 長度的空洞時,在所述空洞中進行分配,生成新的第二內(nèi)存塊;塊管理單元1302,用于管理所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系。相應(yīng)的,所述填充模塊1003具體包括第三填充單元,用于判斷是否有與導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞長度相等的第 二內(nèi)存塊長度,是則依據(jù)所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度 對應(yīng)的地址,取出所述地址對應(yīng)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn) 定的空洞;或第四填充單元,用于判斷是否有多個第二內(nèi)存塊長度之和等于導(dǎo)致第一內(nèi)存區(qū)域 不穩(wěn)定的空洞的長度,是則依據(jù)所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系,獲取該多個第二 內(nèi)存塊長度分別對應(yīng)的多個地址;取出該多個地址對應(yīng)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致 所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞。該實施例中第二內(nèi)存區(qū)域采用將第二內(nèi)存塊混放,并管理第二內(nèi)存塊的長度和地 址信息進行管理,這種方式對于第二內(nèi)存區(qū)域而言,內(nèi)存利用率相對較高。上述系統(tǒng)實施例的具體實現(xiàn)方法請參照前述方法實施例,此處不再贅述。進一步的,在實施本發(fā)明過程中,發(fā)明人還發(fā)現(xiàn)現(xiàn)有技術(shù)中另外還存在如下問題 采用局部壓縮算法進行內(nèi)存管理時,一般還會存在申請空間和釋放空間性能不一致的問 題,具體而言,局部壓縮算法中釋放空間比申請空間會造成更多的內(nèi)存搬移,即釋放空間的 性能遠低于申請空間的性能,比如,對于在路由器上運行路由查找算法的應(yīng)用場合而言,采 用局部壓縮算法進行內(nèi)存管理時,會出現(xiàn)刪除表項的性能遠低于添加表項的性能。采用本發(fā)明實施例提供的內(nèi)存管理系統(tǒng),在釋放空間時,填充模塊1003可以直接取出長度合適的 第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞,從而大大減少了釋放內(nèi)存時大 量的內(nèi)存搬移,進一步的解決了局部壓縮算法中申請空間和釋放空間性能不一致的問題。需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實 體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存 在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵 蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要 素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備
所固有的要素。在沒有更多限制的情況下,由語句“包括一個......”限定的要素,并不排
除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。本領(lǐng)域普通技術(shù)人員可以理解,實現(xiàn)上述實施例方法中的全部或部分步驟是可以 通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲于一計算機可讀取存儲介質(zhì)中, 該程序在執(zhí)行時,包括若干指令用以執(zhí)行本發(fā)明各個實施例所述的方法。這里所述的存儲 介質(zhì),如ROM/RAM、磁碟、光盤等。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在 本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍 內(nèi)。
權(quán)利要求
一種內(nèi)存管理方法,其特征在于,將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,采用局部壓縮算法管理第一內(nèi)存區(qū)域,所述方法包括所述第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞,所述第二內(nèi)存塊位于所述第二內(nèi)存區(qū)域中。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,所述方法還包括當(dāng)接收到內(nèi)存申請時,優(yōu) 先在所述第二內(nèi)存區(qū)域中進行分配。
3.根據(jù)權(quán)利要求2所述方法,其特征在于,所述方法還包括在所述第二內(nèi)存區(qū)域中創(chuàng)建至少一頁,并管理所述頁的頁信息;其中每頁由長度相等 的至少一個第二內(nèi)存塊連續(xù)排列組成,所述第二內(nèi)存塊的長度小于或等于預(yù)先設(shè)定的單次 申請內(nèi)存或單次釋放內(nèi)存的最大長度。
4.根據(jù)權(quán)利要求3所述方法,其特征在于,所述頁信息包括頁首地址與第二內(nèi)存塊長 度的對應(yīng)關(guān)系、和第二內(nèi)存塊的狀態(tài)信息;則優(yōu)先在所述第二內(nèi)存區(qū)域中進行分配包括判斷是否有與本次申請內(nèi)存段長度相等的第二內(nèi)存塊長度,是則依據(jù)所述頁首地址與 第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng)的頁首地址;否則判斷是否有大于本次申請內(nèi)存段長度的第二內(nèi)存塊長度,是則依據(jù)所述頁首地址 與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng)的頁首地址;依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在所述頁首地址對應(yīng)的頁內(nèi)分配處于空閑狀態(tài)的第 二內(nèi)存塊。
5.根據(jù)權(quán)利要求4所述方法,其特征在于,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致所述第一 內(nèi)存區(qū)域不穩(wěn)定的空洞包括判斷是否有與導(dǎo)致所述空洞長度相等的第二內(nèi)存塊長度,是則依據(jù)所述頁首地址與第 二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng)的頁首地址;依據(jù)所述第二內(nèi)存塊 的狀態(tài)信息,在所述頁首地址對應(yīng)的頁內(nèi),取出處于非空閑狀態(tài)的第二內(nèi)存塊中的數(shù)據(jù),填 充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞;或判斷是否有多個第二內(nèi)存塊長度之和等于所述空洞長度,是則依據(jù)等于所述空洞長 度所需的第二內(nèi)存塊長度與個數(shù)的對應(yīng)規(guī)則,和所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān) 系,獲取該多個第二內(nèi)存塊長度分別對應(yīng)的至少一個頁首地址;依據(jù)所述第二內(nèi)存塊的狀 態(tài)信息,在該至少一個頁首地址對應(yīng)的頁內(nèi),取出相應(yīng)長度和個數(shù)的處于非空閑狀態(tài)的第 二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞。
6.根據(jù)權(quán)利要求2所述方法,其特征在于,優(yōu)先在所述第二內(nèi)存區(qū)域中進行分配包括判斷所述第二內(nèi)存區(qū)域中是否有大于或等于本次申請內(nèi)存段長度的空洞,是則在所述空洞中進行分配,生成新的第二內(nèi)存塊,并管理所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系。
7.根據(jù)權(quán)利要求6所述方法,其特征在于,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致所述第一 內(nèi)存區(qū)域不穩(wěn)定的空洞包括判斷是否有與導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞長度相等的第二內(nèi)存塊長度,是則依據(jù) 所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng)的地址,取出所述地 址對應(yīng)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞;或判斷是否有多個第二內(nèi)存塊長度之和等于導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞的長度,是則依據(jù)所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系,獲取該多個第二內(nèi)存塊長度分別對應(yīng)的多 個地址;取出該多個地址對應(yīng)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定 的空洞。
8.根據(jù)權(quán)利要求1所述方法,其特征在于,判斷導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞 的方法包括判斷如果所述第一內(nèi)存區(qū)域中數(shù)據(jù)段的長度小于調(diào)節(jié)因子與預(yù)設(shè)值的乘積,且該數(shù)據(jù) 段后的空洞長度小于預(yù)設(shè)值,則該空洞為導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞;所述預(yù)設(shè) 值為預(yù)先設(shè)定的單次申請內(nèi)存或單次釋放內(nèi)存的最大長度值。
9.一種內(nèi)存管理系統(tǒng),其特征在于,包括劃分模塊,用于將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域;管理模塊,用于采用局部壓縮算法管理第一內(nèi)存區(qū)域;填充模塊,用于所述第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo) 致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞,所述第二內(nèi)存塊位于所述第二內(nèi)存區(qū)域中。
10.根據(jù)權(quán)利要求9所述系統(tǒng),其特征在于,所述系統(tǒng)還包括優(yōu)先分配模塊,用于當(dāng)接 收到內(nèi)存申請時,優(yōu)先在所述第二內(nèi)存區(qū)域中進行分配。
11.根據(jù)權(quán)利要求10所述系統(tǒng),其特征在于,所述劃分模塊還包括頁創(chuàng)建單元,用于在所述第二內(nèi)存區(qū)域中創(chuàng)建至少一頁,其中每頁由長度相等的至少 一個第二內(nèi)存塊連續(xù)排列組成,所述第二內(nèi)存塊的長度小于或等于預(yù)先設(shè)定的單次申請內(nèi) 存或單次釋放內(nèi)存的最大長度;頁管理單元,用于管理所述頁創(chuàng)建單元創(chuàng)建的頁的頁信息。
12.根據(jù)權(quán)利要求11所述系統(tǒng),其特征在于,所述頁信息包括頁首地址與第二內(nèi)存塊 長度的對應(yīng)關(guān)系、和第二內(nèi)存塊的狀態(tài)信息;所述優(yōu)先分配模塊包括第一判斷單元,用于判斷是否有與本次申請內(nèi)存段長度相等的第二內(nèi)存塊長度,是則 依據(jù)所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng)的頁首地 址;第二判斷單元,用于在所述第一判斷單元的判斷結(jié)果為否時,判斷是否有大于本次申 請內(nèi)存段長度的第二內(nèi)存塊長度,是則依據(jù)所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系, 獲取該第二內(nèi)存塊長度對應(yīng)的頁首地址;頁分配單元,用于依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在所述第一判斷單元或第二判斷 單元獲取的頁首地址對應(yīng)的頁內(nèi),分配處于空閑狀態(tài)的第二內(nèi)存塊。
13.根據(jù)權(quán)利要求12所述系統(tǒng),其特征在于,所述填充模塊包括第一填充單元,用于判斷是否有與導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞長度相等的第二內(nèi) 存塊長度,是則依據(jù)所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度 對應(yīng)的頁首地址;依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在所述頁首地址對應(yīng)的頁內(nèi),取出處于 非空閑狀態(tài)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞;或第二填充單元,用于判斷是否有多個第二內(nèi)存塊長度之和等于導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn) 定的空洞長度,是則依據(jù)等于所述空洞長度所需的第二內(nèi)存塊長度與個數(shù)的對應(yīng)規(guī)則,和 所述頁首地址與第二內(nèi)存塊長度的對應(yīng)關(guān)系,獲取該多個第二內(nèi)存塊長度分別對應(yīng)的至少一個頁首地址;依據(jù)所述第二內(nèi)存塊的狀態(tài)信息,在該至少一個頁首地址對應(yīng)的頁內(nèi),取出 相應(yīng)長度和個數(shù)的處于非空閑狀態(tài)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不 穩(wěn)定的空洞。
14.根據(jù)權(quán)利要求10所述系統(tǒng),其特征在于,所述優(yōu)先分配模塊包括混放分配單元,用于判斷所述第二內(nèi)存區(qū)域中有大于或等于本次申請內(nèi)存段長度的空 洞時,在所述空洞中進行分配,生成新的第二內(nèi)存塊;塊管理單元,用于管理所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系。
15.根據(jù)權(quán)利要求14所述系統(tǒng),其特征在于,所述填充模塊包括第三填充單元,用于判斷是否有與導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn)定的空洞長度相等的第二內(nèi) 存塊長度,是則依據(jù)所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系,獲取該第二內(nèi)存塊長度對應(yīng) 的地址,取出所述地址對應(yīng)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的 空洞;或第四填充單元,用于判斷是否有多個第二內(nèi)存塊長度之和等于導(dǎo)致第一內(nèi)存區(qū)域不穩(wěn) 定的空洞的長度,是則依據(jù)所述第二內(nèi)存塊長度和地址的對應(yīng)關(guān)系,獲取該多個第二內(nèi)存 塊長度分別對應(yīng)的多個地址;取出該多個地址對應(yīng)的第二內(nèi)存塊中的數(shù)據(jù),填充導(dǎo)致所述 第一內(nèi)存區(qū)域不穩(wěn)定的空洞。
全文摘要
本發(fā)明公開了一種內(nèi)存管理方法和內(nèi)存管理系統(tǒng),涉及信息技術(shù)領(lǐng)域。所述方法將內(nèi)存劃分為第一內(nèi)存區(qū)域和第二內(nèi)存區(qū)域,采用局部壓縮算法管理第一內(nèi)存區(qū)域,所述第一內(nèi)存區(qū)域處于不穩(wěn)定狀態(tài)時,用第二內(nèi)存塊中的數(shù)據(jù)填充導(dǎo)致所述第一內(nèi)存區(qū)域不穩(wěn)定的空洞,所述第二內(nèi)存塊位于所述第二內(nèi)存區(qū)域中。所述系統(tǒng)包括劃分模塊、管理模塊和填充模塊。采用填充方式可以大大減小內(nèi)存的搬移量,使內(nèi)存能快速恢復(fù)到穩(wěn)定狀態(tài),進而在保證內(nèi)存利用率較高的情況下,進一步提高局部壓縮算法的內(nèi)存管理性能,進而使局部壓縮算法能較好的兼顧到內(nèi)存利用率和內(nèi)存管理性能。
文檔編號G06F12/02GK101923511SQ20091014733
公開日2010年12月22日 申請日期2009年6月11日 優(yōu)先權(quán)日2009年6月11日
發(fā)明者錢俊 申請人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1