專利名稱:一種內(nèi)存管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種通訊設(shè)備的內(nèi)存管理方法,特別是涉及一種對(duì)通訊和效率要求比較高的場(chǎng)合,如點(diǎn)對(duì)點(diǎn)通信等場(chǎng)合。
背景技術(shù):
隨著互聯(lián)網(wǎng)的迅速發(fā)展,越來(lái)越多的數(shù)據(jù)通訊產(chǎn)品投入使用。信息在傳輸過(guò)程中需要被不斷地增加頭部信息以便識(shí)別來(lái)自不同層次的消息,在通訊過(guò)程中傳統(tǒng)的增加頭部信息采用的方法需要不斷申請(qǐng)內(nèi)存、拷貝信息。這樣多次拷貝容易造成通訊速度減慢、效率降低;而多次申請(qǐng)內(nèi)存如果得不到及時(shí)釋放容易造成內(nèi)存泄漏、消息丟失。
發(fā)明內(nèi)容
本發(fā)明提出了一種內(nèi)存管理方法,可以使消息在傳輸過(guò)程中不需要多次申請(qǐng)內(nèi)存,拷貝信息,從而避免因此造成的內(nèi)存流失和傳輸效率低下的問(wèn)題。
本發(fā)明所述的內(nèi)存管理方法,包括以下實(shí)現(xiàn)步驟
1)預(yù)先申請(qǐng)一塊內(nèi)存作為內(nèi)存池,劃分內(nèi)存塊并進(jìn)行初始化,申請(qǐng)的內(nèi)存塊從內(nèi)存池頭部取,釋放的內(nèi)存塊存放在內(nèi)存池尾部;2)在所述內(nèi)存塊中設(shè)置一個(gè)空閑區(qū),用于添加頭部信息使用,消息區(qū)設(shè)置在所述內(nèi)存塊的空閑區(qū)后;3)當(dāng)需要增加頭部信息時(shí),在所述空閑區(qū)將指針前移需要增加的頭部信息長(zhǎng)度,然后添加頭部信息;4)讀取頭部信息時(shí),將指針移動(dòng)到空閑區(qū)的相應(yīng)位置讀取需要的信息。
為了準(zhǔn)確釋放內(nèi)存塊,在步驟1)中設(shè)置內(nèi)存池的起始地址為256的倍數(shù),當(dāng)釋放內(nèi)存塊時(shí),將需要釋放的內(nèi)存地址和0xFFFFFF00按位與的結(jié)果作為該內(nèi)存塊的起始地址,釋放該內(nèi)存塊。
本發(fā)明與現(xiàn)有技術(shù)相比,它使用的內(nèi)存量和拷貝次數(shù)少,提高了通訊效率,減少了內(nèi)存流失和泄漏,同時(shí)由于它簡(jiǎn)單精練,對(duì)設(shè)備要求不高,通用性強(qiáng),有效地降低了成本,減少了研發(fā)和維護(hù)費(fèi)用,并且具有更高的處理效率,非常適合通訊和效率要求非常高的場(chǎng)合。
圖1本發(fā)明所述的內(nèi)存塊結(jié)構(gòu)示意圖;圖2本發(fā)明的內(nèi)存塊初始化流程圖;圖3本發(fā)明的內(nèi)存塊申請(qǐng)流程圖;
圖4本發(fā)明的內(nèi)存塊釋放流程圖。
具體實(shí)施例方式
以下結(jié)合附圖并通過(guò)具體實(shí)施例說(shuō)明本發(fā)明所述的內(nèi)存管理方法先介紹本發(fā)明的內(nèi)存塊結(jié)構(gòu),內(nèi)存塊的大小可以在具體使用中根據(jù)實(shí)際情況設(shè)置,如圖1所示以每塊內(nèi)存占1536字節(jié)為例,每個(gè)內(nèi)存塊由內(nèi)存塊信息、空閑區(qū)和消息區(qū)組成,空閑區(qū)64字節(jié)用于存放頭部信息,消息區(qū)1456字節(jié)用于存放消息。
本發(fā)明所述方法的處理步驟分別如下1.如圖2所示,內(nèi)存塊初始化處理步驟為第一步申請(qǐng)內(nèi)存組成內(nèi)存池,調(diào)整內(nèi)存池起始地址為256的倍數(shù)。
第二步填寫(xiě)內(nèi)存池相關(guān)信息,如內(nèi)存池頭尾地址,總的內(nèi)存塊數(shù),空閑內(nèi)存塊數(shù)等。
第三步將內(nèi)存池劃分為若干內(nèi)存塊,其中每塊內(nèi)存大小為1536字節(jié),填寫(xiě)內(nèi)存塊信息,并將內(nèi)存池中所有內(nèi)存塊用鏈表鏈接。
2.如圖3所示,內(nèi)存塊的申請(qǐng)?zhí)幚聿襟E第一步判斷要申請(qǐng)的內(nèi)存大小是否大于內(nèi)存塊最大長(zhǎng)度。如果大于內(nèi)存塊最大長(zhǎng)度,則采用其它方式申請(qǐng)內(nèi)存,否則將采用該內(nèi)存塊方式申請(qǐng)。
第二步判斷內(nèi)存池是否有空閑內(nèi)存塊,如果有,則從內(nèi)存池頭部取出一塊內(nèi)存,返回信息區(qū)指針,否則返回空。
3.如圖4所示,內(nèi)存塊釋放處理步驟第一步將要釋放的內(nèi)存地址與0xFFFFFF00按位與,得到內(nèi)存塊的起始地址。
第二步判斷該內(nèi)存塊的起始地址是否在內(nèi)存塊池的地址范圍內(nèi)。如果不是,表明該內(nèi)存不是用內(nèi)存塊方法申請(qǐng)的內(nèi)存,采用其它方式釋放,否則跳轉(zhuǎn)下一步。
第三步判斷該內(nèi)存的標(biāo)識(shí)位是否正確,如果不正確,表明該內(nèi)存塊出錯(cuò),否則跳轉(zhuǎn)下一步。
第四步內(nèi)存塊的計(jì)數(shù)器減1,如果該內(nèi)存塊的計(jì)數(shù)器為0,表明該內(nèi)存要釋放,否則返回。
第五步將內(nèi)存塊鏈接到內(nèi)存池的尾部,同時(shí)內(nèi)存池的空閑數(shù)加1。
通過(guò)以上的說(shuō)明,可以看出采用本發(fā)明的內(nèi)存塊管理方法和傳統(tǒng)的內(nèi)存管理方法相比處理效率更高,傳輸速度更快,而且不易造成內(nèi)存流失,代碼量極少,對(duì)設(shè)備沒(méi)有提出額外的要求,易于開(kāi)發(fā)和維護(hù)。
權(quán)利要求
1.一種內(nèi)存管理方法,其特征在于,包括以下實(shí)現(xiàn)步驟1)預(yù)先申請(qǐng)一塊內(nèi)存作為內(nèi)存池,劃分內(nèi)存塊并進(jìn)行初始化,申請(qǐng)的內(nèi)存塊從內(nèi)存池頭部取,釋放的內(nèi)存塊存放在內(nèi)存池尾部;2)在所述內(nèi)存塊中設(shè)置一個(gè)空閑區(qū),用于添加頭部信息使用,消息區(qū)設(shè)置在所述內(nèi)存塊的空閑區(qū)后;3)當(dāng)需要增加頭部信息時(shí),在所述空閑區(qū)將指針前移需要增加的頭部信息長(zhǎng)度,然后添加頭部信息;4)讀取頭部信息時(shí),將指針移動(dòng)到空閑區(qū)的相應(yīng)位置讀取需要的信息。
2.根據(jù)權(quán)利要求1所述的內(nèi)存管理方法,其特征在于,為了準(zhǔn)確釋放內(nèi)存塊,在所述步驟1)中設(shè)置內(nèi)存池的起始地址為256的倍數(shù),釋放內(nèi)存塊時(shí),將需要釋放的內(nèi)存地址和0xFFFFFF00按位與的結(jié)果作為該內(nèi)存塊的起始地址,釋放該內(nèi)存塊。
3.根據(jù)權(quán)利要求1或2所述的內(nèi)存管理方法,其特征在于,所述步驟1)中劃分內(nèi)存塊并進(jìn)行初始化包括以下處理步驟第一步申請(qǐng)內(nèi)存組成內(nèi)存池,調(diào)整內(nèi)存池起始地址為256的倍數(shù)。第二步填寫(xiě)內(nèi)存池信息;第三步將內(nèi)存池劃分為若干內(nèi)存塊,填寫(xiě)內(nèi)存塊信息,并將內(nèi)存池中所有內(nèi)存塊用鏈表鏈接。
4.根據(jù)權(quán)利要求1或2所述的內(nèi)存管理方法,其特征在于,所述步驟1)中釋放內(nèi)存塊包括以下處理步驟第一步將要釋放的內(nèi)存地址與0xFFFFFF00按位與,得到內(nèi)存塊的起始地址;第二步判斷該內(nèi)存塊的起始地址是否在內(nèi)存塊池的地址范圍內(nèi)。如果不是,表明該內(nèi)存不是用內(nèi)存塊方法申請(qǐng)的內(nèi)存,采用其它方式釋放,否則跳轉(zhuǎn)下一步;第三步判斷該內(nèi)存的標(biāo)識(shí)位是否正確,如果不正確,表明該內(nèi)存塊出錯(cuò);否則跳轉(zhuǎn)下一步;第四步內(nèi)存塊的計(jì)數(shù)器減1,如果該內(nèi)存塊的計(jì)數(shù)器為0,表明該內(nèi)存要釋放,否則返回;第五步將內(nèi)存塊鏈接到內(nèi)存池的尾部,同時(shí)內(nèi)存池的空閑數(shù)加1。
5.根據(jù)權(quán)利要求1所述的內(nèi)存管理方法,其特征在于,所述內(nèi)存塊中每塊內(nèi)存占1536字節(jié),由內(nèi)存塊信息、空閑區(qū)和消息區(qū)組成,空閑區(qū)占64字節(jié),消息區(qū)占1456字節(jié)。
全文摘要
本發(fā)明涉及一種通訊設(shè)備的內(nèi)存管理方法,包括以下實(shí)現(xiàn)步驟預(yù)先申請(qǐng)一塊內(nèi)存作為內(nèi)存池,劃分內(nèi)存塊并進(jìn)行初始化,申請(qǐng)的內(nèi)存塊從內(nèi)存池頭部取,釋放的內(nèi)存塊存放在內(nèi)存池尾部;在所述內(nèi)存塊中設(shè)置一個(gè)空閑區(qū),用于添加頭部信息使用,消息區(qū)設(shè)置在所述內(nèi)存塊的空閑區(qū)后;當(dāng)需要增加頭部信息時(shí),在所述空閑區(qū)將指針前移需要增加的頭部信息長(zhǎng)度,然后添加頭部信息;讀取頭部信息時(shí),將指針移動(dòng)到空閑區(qū)的相應(yīng)位置讀取需要的信息。采用本發(fā)明的方法可以減少拷貝次數(shù),提高通訊效率,減少內(nèi)存流失和泄漏,對(duì)設(shè)備要求不高,通用性強(qiáng),有效地降低了成本,適合通訊和效率要求非常高的場(chǎng)合。
文檔編號(hào)H04L12/28GK1505330SQ02151120
公開(kāi)日2004年6月16日 申請(qǐng)日期2002年12月2日 優(yōu)先權(quán)日2002年12月2日
發(fā)明者馮敏, 馮 敏 申請(qǐng)人:深圳市中興通訊股份有限公司上海第二研究所, 深圳市中興通訊股份有限公司上海第二