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

一種分塊內(nèi)存的申請和釋放方法

文檔序號:6574123閱讀:364來源:國知局
專利名稱:一種分塊內(nèi)存的申請和釋放方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種通信設(shè)備中分塊內(nèi)存的申請和釋放方法。
背景技術(shù)
在現(xiàn)代通信設(shè)備中,內(nèi)存是其主要組成部分。通信設(shè)備中內(nèi)存的主要作用在于臨時存儲系統(tǒng)需要暫存的數(shù)據(jù),在系統(tǒng)處理過程中調(diào)用內(nèi)存中存儲的數(shù)據(jù),在處理完畢后則清除內(nèi)存中的數(shù)據(jù),以便于新的數(shù)據(jù)存入?,F(xiàn)有技術(shù)的內(nèi)存管理方法一般是預(yù)先向操作系統(tǒng)申請一塊存儲量較大的內(nèi)存區(qū),再將該內(nèi)存區(qū)劃分為若干內(nèi)存池,每個內(nèi)存池中又劃分為若干存儲量大小不一且固定不變的內(nèi)存塊,各種存儲量大小內(nèi)存塊的數(shù)量可根據(jù)需要配置。當(dāng)程序需要使用內(nèi)存時(例如為一個指針變量申請一塊內(nèi)存),需先申請一塊內(nèi)存,程序會根據(jù)具體需要申請的內(nèi)存存儲量大小尋找合適的內(nèi)存塊,將分配的內(nèi)存塊起始地址返回給程序的指針變量。而當(dāng)程序不再繼續(xù)使用內(nèi)存時,就會釋放上述內(nèi)存塊。常用的釋放方法就是將該指針判斷為空指針,如果不是空指針則釋放該指針指向的分塊內(nèi)存。
由于程序越來越復(fù)雜和龐大,現(xiàn)有的分塊內(nèi)存申請和釋放方法較為簡單,當(dāng)發(fā)生內(nèi)存越界等異常情況后,極有可能造成極大的破壞。以前述指針變量釋放內(nèi)存為例,當(dāng)發(fā)生內(nèi)存越界后,指針變量的值有可能已經(jīng)被修改,申請的內(nèi)存塊也有可能已經(jīng)被修改和破壞,而現(xiàn)有技術(shù)的分塊內(nèi)存釋放方法是無法獲知這些信息的,通過判斷指針不為空的方式直接釋放該指針?biāo)赶虻膬?nèi)存,極有可能破壞其他的系統(tǒng)數(shù)據(jù),對系統(tǒng)帶來極大的風(fēng)險,導(dǎo)致災(zāi)難性的后果。

發(fā)明內(nèi)容
本發(fā)明提出一種新的分塊內(nèi)存申請和釋放方法,能在很大程度上保證在沒有發(fā)生內(nèi)存越界等異常情況的前提下正確釋放分塊內(nèi)存,克服現(xiàn)有技術(shù)簡單的內(nèi)存釋放給系統(tǒng)帶來嚴(yán)重的后果等缺點,對系統(tǒng)起到保護(hù)作用。另外,在發(fā)生內(nèi)存越界等異常情況時,還可以根據(jù)需要進(jìn)行斷言(簡稱為assert)等相應(yīng)的處理。
本發(fā)明內(nèi)存申請和釋放方法將內(nèi)存塊定義為包括頭部擴展區(qū)和消息區(qū)的結(jié)構(gòu),根據(jù)所需內(nèi)存存儲量的大小選擇申請內(nèi)存的方式,并根據(jù)申請內(nèi)存的方式選擇釋放內(nèi)存的方式。
本發(fā)明內(nèi)存申請和釋放方法可根據(jù)需要設(shè)定內(nèi)存塊頭部擴展區(qū)的內(nèi)容和長度,內(nèi)存塊頭部擴展區(qū)存儲內(nèi)存塊狀態(tài)等信息,存儲消息的消息區(qū)設(shè)置在頭部擴展區(qū)后。
本發(fā)明內(nèi)存申請和釋放方法在所需內(nèi)存的存儲量小于或等于系統(tǒng)內(nèi)存塊最大存儲量時,將分配內(nèi)存塊的頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息置成“已申請”,將消息區(qū)的起始地址返回給程序,否則,采用現(xiàn)有技術(shù)的MALLOC或其他方式申請。
本發(fā)明內(nèi)存申請和釋放方法在程序需要釋放內(nèi)存時,首先判斷是否為采用現(xiàn)有技術(shù)的MALLOC或其他方式申請的內(nèi)存,如是則采用現(xiàn)有技術(shù)的FREE或其他方式釋放。否則,進(jìn)一步判斷該內(nèi)存塊頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息,如果是“已申請”則正常釋放該內(nèi)存并將頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息置成“已釋放”,否則,根據(jù)需要進(jìn)行相應(yīng)處理(如assert)。
本發(fā)明內(nèi)存申請和釋放方法包括以下步驟1、定義分塊內(nèi)存的內(nèi)存塊結(jié)構(gòu),包括頭部擴展區(qū)和消息區(qū),并根據(jù)需要設(shè)定頭部擴展區(qū)的內(nèi)容和長度,頭部擴展區(qū)存儲內(nèi)存塊狀態(tài)等信息,存儲消息的消息區(qū)設(shè)置在頭部擴展區(qū)后;2、當(dāng)程序需要申請內(nèi)存時,根據(jù)所需內(nèi)存存儲量的大小可采用兩種方式進(jìn)行申請方式1所需內(nèi)存的存儲量小于或等于系統(tǒng)內(nèi)存塊最大存儲量,將分配內(nèi)存塊的頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息置成“已申請”,將消息區(qū)的起始地址返回給程序;方式2所需內(nèi)存的存儲量大于系統(tǒng)內(nèi)存塊最大存儲量,采用現(xiàn)有技術(shù)的MALLOC或其他方式申請;3、當(dāng)程序需要釋放該內(nèi)存時,根據(jù)不同的內(nèi)存申請的方式采取相應(yīng)的釋放方式采用方式1申請的內(nèi)存判斷該分塊內(nèi)存頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息,如果是“已申請”,表明該內(nèi)存塊沒有被破壞或者被破壞的幾率很小,可以正常釋放該內(nèi)存并將頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息置成“已釋放”,否則,表明內(nèi)存塊已經(jīng)被破壞,可以根據(jù)需要進(jìn)行相應(yīng)處理(如assert);采用方式2申請的內(nèi)存采用現(xiàn)有技術(shù)的FREE或其他方式釋放。
本發(fā)明內(nèi)存申請和釋放方法與現(xiàn)有技術(shù)相比,在分塊內(nèi)存中設(shè)置了內(nèi)存塊狀態(tài)信息,在分塊內(nèi)存的申請和釋放時,對該狀態(tài)信息進(jìn)行設(shè)置和判斷,能很大程度上保證在沒有發(fā)生內(nèi)存越界等異常情況的前提下正確釋放分塊內(nèi)存,對系統(tǒng)起到保護(hù)作用。另外,在發(fā)生內(nèi)存越界等異常情況時,還可以根據(jù)需要進(jìn)行assert處理,便于查找問題,非常利于程序調(diào)試。


圖1本發(fā)明內(nèi)存申請和釋放方法分塊內(nèi)存實施例的結(jié)構(gòu)示意圖;圖2本發(fā)明內(nèi)存申請和釋放方法分塊內(nèi)存的申請流程圖;圖3本發(fā)明內(nèi)存申請和釋放方法分塊內(nèi)存的釋放流程圖。
下面結(jié)合附圖及具體實施方式
對本發(fā)明判斷方法做詳細(xì)的說明。
附圖1是本發(fā)明內(nèi)存申請和釋放方法分塊內(nèi)存實施例的結(jié)構(gòu)示意圖。在此實施例中,內(nèi)存塊存儲量占64字節(jié)為例,由頭部擴展區(qū)和消息區(qū)組成,頭部擴展區(qū)2字節(jié)存放內(nèi)存塊狀態(tài)信息(取值詳見表1),消息區(qū)62字節(jié)存放消息。顯然,內(nèi)存塊存儲量的大小和頭部擴展區(qū)存儲量的大小可以在具體使用中根據(jù)需要設(shè)置。
表1頭部擴展區(qū)2字節(jié)存放內(nèi)存塊狀態(tài)信息

附圖2是本發(fā)明內(nèi)存申請和釋放方法分塊內(nèi)存的申請流程圖。在此實施例中設(shè)定程序需要申請一塊存儲量大小為X(單位為字節(jié),下同)的內(nèi)存。具體包括以下步驟1、程序需要申請一塊存儲量大小為X的內(nèi)存;2、比較(X+2)與系統(tǒng)設(shè)置的最大內(nèi)存塊存儲量的大?。?、如果(X+2)小于或等于系統(tǒng)設(shè)置的最大內(nèi)存塊存儲量,系統(tǒng)找到存儲量合適的內(nèi)存塊,將內(nèi)存塊頭部擴展區(qū)的內(nèi)存塊狀態(tài)信息置成0xAA55,然后將消息區(qū)的起始地址傳遞給程序,此為方式1;否則,繼續(xù)執(zhí)行下一步驟;4、通過現(xiàn)有技術(shù)的MALLOC或者其他方式申請存儲量大小為X的內(nèi)存,此為方式2。
附圖3是本發(fā)明內(nèi)存申請和釋放方法分塊內(nèi)存的釋放流程圖。具體包括以下步驟1、程序需要釋放該內(nèi)存;2、判斷該內(nèi)存在申請時采用何種方式;3、如果是方式1,則進(jìn)一步判斷該內(nèi)存塊的頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息是否為0xAA55,否則執(zhí)行步驟6;4、如果該內(nèi)存塊的頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息是0xAA55,則釋放該內(nèi)存塊,并將該內(nèi)存塊頭部信息置成0x55AA,否則,執(zhí)行下一步驟;5、根據(jù)需要進(jìn)行assert或者其他方式的處理;
6、通過現(xiàn)有技術(shù)的FREE或者其他方式釋放。
本發(fā)明方法還可有其他多種實施例,在不背離本發(fā)明方法的精神及其實質(zhì)的情況下,本領(lǐng)域技術(shù)人員當(dāng)可相據(jù)本發(fā)明方法作出各種相應(yīng)的改變或變形,但這些相應(yīng)的改變或變形均屬于本發(fā)明方法的權(quán)利要求保護(hù)范圍。
權(quán)利要求
1.一種分塊內(nèi)存的申請和釋放方法,其特征在于將內(nèi)存塊定義為包括頭部擴展區(qū)和消息區(qū)的結(jié)構(gòu),根據(jù)所需內(nèi)存存儲量的大小選擇申請內(nèi)存的方式,并根據(jù)申請內(nèi)存的方式選擇釋放內(nèi)存的方式。
2.根據(jù)權(quán)利要求1所述分塊內(nèi)存申請和釋放方法,其特征在于可根據(jù)需要設(shè)定內(nèi)存塊頭部擴展區(qū)的內(nèi)容和長度。
3.根據(jù)權(quán)利要求1所述分塊內(nèi)存申請和釋放方法,其特征在于內(nèi)存塊頭部擴展區(qū)存儲內(nèi)存塊狀態(tài)等信息,存儲消息的消息區(qū)設(shè)置在內(nèi)存塊頭部擴展區(qū)后。
4.根據(jù)權(quán)利要求1所述分塊內(nèi)存申請和釋放方法,其特征在于當(dāng)所需內(nèi)存的存儲量小于或等于系統(tǒng)內(nèi)存塊最大存儲量時,將分配內(nèi)存塊的頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息置成“已申請”,將消息區(qū)的起始地址返回給程序,否則,采用現(xiàn)有技術(shù)的MALLOC或其他方式申請。
5.根據(jù)權(quán)利要求1所述分塊內(nèi)存申請和釋放方法,其特征在于當(dāng)程序需要釋放內(nèi)存時,如果該內(nèi)存是以MALLOC或者其他方式申請的,則采用現(xiàn)有技術(shù)的FREE或者其他方式釋放,否則,進(jìn)一步判斷該內(nèi)存塊頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息是否為“已申請”,是則正常釋放該內(nèi)存并將頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息置成“已釋放”,否則根據(jù)需要進(jìn)行相應(yīng)處理(如assert)。
全文摘要
本發(fā)明提出一種新的分塊內(nèi)存申請和釋放方法,能在很大程度上保證在沒有發(fā)生內(nèi)存越界等異常情況的前提下正確釋放分塊內(nèi)存,克服現(xiàn)有技術(shù)簡單的內(nèi)存釋放給系統(tǒng)帶來嚴(yán)重的后果等缺點,對系統(tǒng)起到保護(hù)作用。另外,在發(fā)生內(nèi)存越界等異常情況時,還可以根據(jù)需要進(jìn)行斷言(簡稱為assert)等相應(yīng)的處理。本發(fā)明內(nèi)存申請和釋放方法在程序需要釋放內(nèi)存時,首先判斷是否為采用現(xiàn)有技術(shù)的MALLOC或其他方式申請的內(nèi)存,如是則采用現(xiàn)有技術(shù)的FREE或其他方式釋放。否則,進(jìn)一步判斷該內(nèi)存塊頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息,如果是“已申請”則正常釋放該內(nèi)存并將頭部擴展區(qū)中的內(nèi)存塊狀態(tài)信息置成“已釋放”,否則,根據(jù)需要進(jìn)行相應(yīng)處理(如assert)。
文檔編號G06F12/02GK101013396SQ20071007818
公開日2007年8月8日 申請日期2007年2月7日 優(yōu)先權(quán)日2007年2月7日
發(fā)明者李貴勇, 王小華, 陳賢亮, 何蘭 申請人:重慶重郵信科股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1