專(zhuān)利名稱(chēng):一種檢測(cè)內(nèi)存存取錯(cuò)誤的方法
技術(shù)領(lǐng)域:
本發(fā)明是關(guān)于一種檢測(cè)內(nèi)存存取錯(cuò)誤的方法,尤指一種在預(yù)定數(shù)據(jù)位置的前、后端,各加入頭端檢查區(qū)域及尾端檢查區(qū)域,進(jìn)一步達(dá)到檢查內(nèi)存在寫(xiě)入、讀出與釋放內(nèi)存時(shí)是否有錯(cuò)誤。
背景技術(shù):
計(jì)算機(jī)無(wú)論是硬件或者是軟件的技術(shù)皆發(fā)展至高度的水平,消費(fèi)者也可以以極為低廉的代價(jià)獲得功能強(qiáng)大的個(gè)人計(jì)算機(jī)(PC);而應(yīng)用程序的設(shè)計(jì),也成為我國(guó)轉(zhuǎn)型至發(fā)達(dá)國(guó)家的重要產(chǎn)業(yè),對(duì)于軟件的應(yīng)用程序編寫(xiě)而言,如匯編語(yǔ)言(as semble)、C、C++...等語(yǔ)言,具有對(duì)計(jì)算機(jī)硬件較高的控制效率,以及易于學(xué)習(xí)的優(yōu)點(diǎn),因此常成為程序設(shè)計(jì)者所學(xué)習(xí)的計(jì)算機(jī)程序語(yǔ)言,但在計(jì)算機(jī)程序的使用過(guò)程中,常常會(huì)因?yàn)閮?nèi)存存取的過(guò)程中發(fā)生錯(cuò)誤,例如在數(shù)據(jù)數(shù)組的邊界錯(cuò)誤(array bounds violat ion)或是在釋放內(nèi)存的過(guò)程中,使計(jì)算機(jī)的硬件產(chǎn)生不正常動(dòng)作的現(xiàn)象,因此沒(méi)有適當(dāng)?shù)臋z查程序來(lái)檢測(cè)內(nèi)存的存取動(dòng)作的正確性,就無(wú)法將計(jì)算機(jī)程序順利編寫(xiě)完成,現(xiàn)有技術(shù)中會(huì)在程序系統(tǒng)上建立一個(gè)檢查表(TABLE),此檢查表儲(chǔ)存所指定使用的內(nèi)存地址以及利用該檢查表監(jiān)視內(nèi)存,當(dāng)程序進(jìn)行內(nèi)存存取時(shí),程序會(huì)利用此檢查表讀出內(nèi)存所在位置,以確認(rèn)內(nèi)存的有效性與內(nèi)存的大小,但依據(jù)此方法程序執(zhí)行時(shí)必須多次讀取檢查表,該做法的缺點(diǎn)為必須消耗較多的存儲(chǔ)空間,以允許檢查檢查表,不但效率低,而且也不容易及時(shí)檢測(cè)內(nèi)存錯(cuò)誤,另在高度管道線(xiàn)結(jié)構(gòu)的數(shù)字信號(hào)處理的芯片(high pipeline structure DSP)程序設(shè)計(jì)中,任何的內(nèi)存檢查或是內(nèi)存存取將會(huì)中斷管道線(xiàn)的結(jié)構(gòu),造成延遲,此種現(xiàn)象在實(shí)時(shí)系統(tǒng)(Real-time system)中由為明顯,特別是內(nèi)存的存取過(guò)程延滯會(huì)影響其它作業(yè)(task)的進(jìn)程。而本發(fā)明正是一種可檢查內(nèi)存存取的方法,可有效解決現(xiàn)有編寫(xiě)程序的缺點(diǎn),有助于在程序開(kāi)發(fā)的周期內(nèi)縮短開(kāi)發(fā)時(shí)間。
發(fā)明內(nèi)容
基于解決以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明提供一種檢測(cè)內(nèi)存存取錯(cuò)誤的方法,在內(nèi)存存取分配區(qū)域之前端和后端,各加入頭端檢查區(qū)域及尾端檢查區(qū)域,該頭端檢查區(qū)與尾檢查區(qū)域各包括狀態(tài)標(biāo)志和內(nèi)存尺寸,利用該狀態(tài)標(biāo)志與該存儲(chǔ)尺寸,進(jìn)一步達(dá)到檢查內(nèi)存存取是否有錯(cuò)誤的信息。
根據(jù)本發(fā)明的另一個(gè)方面,提供一種內(nèi)存分配測(cè)試的方法,其步驟包括(a1)當(dāng)程序需要存儲(chǔ)尺寸T的使用內(nèi)存時(shí),對(duì)內(nèi)存塊要求預(yù)定區(qū)域位置,該預(yù)定區(qū)域位置大小為該存儲(chǔ)尺寸T、頭端檢查區(qū)域大小與尾端檢查區(qū)域大小的和;(b1)該內(nèi)存塊向該程序返回可使用的響應(yīng);(c1)該程序在該預(yù)定區(qū)域位置內(nèi)增加頭端檢查區(qū),且設(shè)定該存儲(chǔ)尺寸=T,該使用內(nèi)存地址Addr;(d1)該程序在該預(yù)定區(qū)域位置內(nèi)增加尾端檢查區(qū);以及,(e1)內(nèi)存設(shè)定返回預(yù)定區(qū)域。
解本發(fā)明提出一種簡(jiǎn)單的基本塊存儲(chǔ)裝置,利用非初始的存儲(chǔ)存取為基礎(chǔ),這種結(jié)構(gòu)不重新配任何重新定義檢查表記錄存儲(chǔ)數(shù)據(jù),程序也不檢查每一內(nèi)存組件,因此它是數(shù)字系統(tǒng)處理實(shí)時(shí)系統(tǒng)時(shí),預(yù)先對(duì)存儲(chǔ)存取錯(cuò)誤進(jìn)行糾錯(cuò)的最佳方法。
為進(jìn)一步對(duì)本發(fā)明有更深入的說(shuō)明,乃通過(guò)以下圖示、圖號(hào)說(shuō)明及發(fā)明詳細(xì)說(shuō)明,冀能對(duì)貴審查委員于審查工作有所助益。
圖1是本發(fā)明在內(nèi)存存取保護(hù)區(qū)域的前后端各插入頭端檢查區(qū)域和尾端檢查區(qū)域的示意圖。
圖2是本發(fā)明的內(nèi)存分配的處理流程圖。
圖3是本發(fā)明的內(nèi)存寫(xiě)入檢查的處理流程圖。
圖4是本發(fā)明的內(nèi)存讀取檢查的處理流程圖。
圖5是本發(fā)明的內(nèi)存釋放內(nèi)存的處理流程圖。
附圖標(biāo)記說(shuō)明11~頭部檢查區(qū)域111~狀態(tài)標(biāo)志112~存儲(chǔ)尺寸
12~內(nèi)存存取分配區(qū)域13~尾部檢查區(qū)域131~狀態(tài)標(biāo)志132~存儲(chǔ)尺寸(21)用戶(hù)的程序設(shè)定預(yù)定存儲(chǔ)區(qū)域尺寸,其大小為預(yù)定存儲(chǔ)塊大小加上前、后端檢查區(qū)域的大??;(22)是否有足夠的內(nèi)存大???(23)存儲(chǔ)設(shè)定失敗;(24)在預(yù)定區(qū)域位置增加頭端信息位置,其公式為狀態(tài)標(biāo)志(State_flag)設(shè)定為內(nèi)存未初始標(biāo)志;存儲(chǔ)尺寸設(shè)定大小為T(mén),其頭端的初始地址也就是上述存儲(chǔ)塊的初始位置;(25)在預(yù)定區(qū)域位置增加尾端信息位置,其公式為狀態(tài)標(biāo)志(State_flag)設(shè)定為內(nèi)存未初始標(biāo)志;存儲(chǔ)尺寸設(shè)定大小為T(mén),其頭端的初始地址也就是存儲(chǔ)塊的初始位置加上存儲(chǔ)尺寸再加上頭端信息的地址大小;(26)內(nèi)存設(shè)定返回預(yù)定區(qū)域。
(31)讀出用戶(hù)的程序檢查存儲(chǔ)塊的地址為Addr;(32)頭端檢查位置(H_Addr)=Addr-4;狀態(tài)標(biāo)志(State_flag)=(*H_Addr)&0×0000ffff;尾端檢查位置(T_Addr)=Addr+存儲(chǔ)尺寸T;(33)檢查狀態(tài)標(biāo)志(State_flag)是否等于內(nèi)存標(biāo)志(MEM_FLAG),;(34)尾端檢查位置(*T_Addr)是否等于頭端檢查位置(*H_Addr)?;(35)頭端資料失??;(36)尾端資料失敗;(37)內(nèi)存寫(xiě)入檢查結(jié)果為失??;(38)設(shè)定標(biāo)志(Flag)=內(nèi)存初始標(biāo)志(MEM_INIT);設(shè)定尾端標(biāo)志(Tail Flag)=內(nèi)存初始標(biāo)志(MEM_INIT);(39)內(nèi)存寫(xiě)入檢查結(jié)果為成功;(41)用戶(hù)程序檢查內(nèi)存的位置范圍由Addr至Addr+Read_Size;(42)頭端地址H_Addr=Addr-4;
狀態(tài)標(biāo)志(State_flag)=(頭端地址*H_Addr)&0×ffff0000;存儲(chǔ)尺寸(Size)=(*H_Addr)&0×0000ffff;尾端地址(T_Addr)=Addr+Size;(43)檢查狀態(tài)標(biāo)志(State_flag)是否等于內(nèi)存初始標(biāo)志(MEM_FLAG_INT)?;(44)程序讀到的內(nèi)存大?。荚阮A(yù)定大???;(45)頭端數(shù)據(jù)失敗或內(nèi)存尚未初始化;(46)讀取存儲(chǔ)超過(guò)內(nèi)存的限制;(47)存儲(chǔ)讀取檢查返回失敗;(48)存儲(chǔ)讀取檢查返回成功;(51)用戶(hù)程序檢查存儲(chǔ)位置;(52)H_Addr=Addr-4;狀態(tài)標(biāo)志(State_flag)=(頭端地址*H_Addr)&0×ffff0000;存儲(chǔ)尺寸(Size)=(*H_Addr)&0×0000ffff;尾端地址(T_Addr)=Addr+Size;(53)檢查狀態(tài)標(biāo)志(State_flag)是否等于內(nèi)存標(biāo)志?;(54)檢查尾端檢查位置(*T_Addr)是否等于頭端檢查位置(*H_Addr)?;(55)頭端資料失敗;(56)尾端資料失??;(57)存儲(chǔ)讀取檢查返回失??;(58)(頭端地址*H_Addr)=0;(尾端地址*T_Addr)=0;(59)存儲(chǔ)寫(xiě)入檢查返回成功;具體實(shí)施方式
配合下列
本發(fā)明的詳細(xì)結(jié)構(gòu),及其連結(jié)關(guān)系,以利于審查員審查。
請(qǐng)參閱圖1所示,是本發(fā)明在內(nèi)存存取分配區(qū)域的前后端各放置頭端檢查區(qū)域和尾端檢查區(qū)域的實(shí)施例,當(dāng)系統(tǒng)存取的數(shù)據(jù)超過(guò)預(yù)定數(shù)據(jù)的大小時(shí),會(huì)造成內(nèi)存存取錯(cuò)誤的問(wèn)題,本發(fā)明是利用在內(nèi)存存取分配區(qū)域12的前、后端,各加入頭端檢查區(qū)域11和尾端檢查區(qū)域13(比預(yù)定數(shù)據(jù)大小多要了該前、后端的檢查區(qū)域大小),而頭、尾端檢查區(qū)域的數(shù)據(jù)大小可以相同,頭端檢查區(qū)與尾端檢查區(qū)各包含狀態(tài)標(biāo)志和存儲(chǔ)尺寸,狀態(tài)標(biāo)志是表示內(nèi)存目前狀態(tài)標(biāo)志,存儲(chǔ)尺寸是程序?qū)嶋H上使用的內(nèi)存大小,本發(fā)明可應(yīng)用于子程序的編寫(xiě),而受到母程序呼叫而產(chǎn)生動(dòng)作,進(jìn)一步達(dá)到檢查內(nèi)存存取是否有錯(cuò)誤的信息。
在附圖中,該頭端檢查區(qū)域11和尾端檢查區(qū)域13放置在每一動(dòng)態(tài)分配存儲(chǔ)塊中,該頭端檢查區(qū)域11是包含狀態(tài)標(biāo)志111和存儲(chǔ)尺寸112;并且該尾端檢查區(qū)域13也包含狀態(tài)標(biāo)志131和存儲(chǔ)尺寸132,實(shí)施例中以32位的處理器為例,當(dāng)用戶(hù)需要分配存儲(chǔ)塊為代號(hào)T的尺寸,該內(nèi)存分配程序?qū)⒎峙?T+8)字節(jié)大小,同時(shí)在頭端檢查區(qū)域11和尾端檢查區(qū)域13分別分配4字節(jié)的大小,且該頭端檢查區(qū)域11及尾端檢查區(qū)域13包含有相同的數(shù)據(jù)(狀態(tài)標(biāo)志及存儲(chǔ)尺寸)。
請(qǐng)參閱圖2所示,是本發(fā)明的內(nèi)存分配的處理流程圖,其動(dòng)態(tài)的對(duì)內(nèi)存分配當(dāng)分配新存儲(chǔ)塊,同時(shí)插入頭端信息和尾端信息,在尚未初始的狀態(tài)分配該內(nèi)存,并且將該狀態(tài)標(biāo)志設(shè)為內(nèi)存未初始標(biāo)志(MEM_FLAG_UNINIT),接著分配的存儲(chǔ)尺寸T的存儲(chǔ)塊,另外在分配內(nèi)存時(shí)的返回值是回報(bào)程序是否分配內(nèi)存成功,其處理步驟包括(21)用戶(hù)的程序設(shè)定預(yù)定存儲(chǔ)區(qū)域尺寸,其大小為預(yù)定存儲(chǔ)塊大小加上前、后端檢查區(qū)域的大??;(22)是否有足夠的內(nèi)存大小?若其結(jié)果為是時(shí),則執(zhí)行(25)步驟;若其結(jié)果為否時(shí),則執(zhí)行(24)步驟;(23)存儲(chǔ)設(shè)定失敗;(24)在預(yù)定區(qū)域位置增加頭端信息位置,其公式為狀態(tài)標(biāo)志(State_flag)設(shè)定為內(nèi)存未初始標(biāo)志;存儲(chǔ)尺寸設(shè)定大小為T(mén),其頭端的初始地址也就是上述存儲(chǔ)塊的初始位置;(25)在預(yù)定區(qū)域位置增加尾端信息位置,其公式為狀態(tài)標(biāo)志(State_flag)設(shè)定為內(nèi)存未初始標(biāo)志;存儲(chǔ)尺寸設(shè)定大小為T(mén),其頭端的初始地址也就是存儲(chǔ)塊的初始位置加上存儲(chǔ)尺寸再加上頭端信息的地址大??;(26)內(nèi)存設(shè)定返回預(yù)定區(qū)域。
請(qǐng)參閱圖3所示,是本發(fā)明在程序運(yùn)作時(shí)內(nèi)存寫(xiě)入檢查內(nèi)存的處理流程圖。
存儲(chǔ)寫(xiě)入檢查方式在程序?qū)懭牒?,該?nèi)存塊即設(shè)定成可讀取的,當(dāng)在程序?qū)懭霐?shù)據(jù)存儲(chǔ)器之后,對(duì)于狀態(tài)標(biāo)志區(qū)域在頭端檢查區(qū)域及尾端檢查區(qū)域改為存儲(chǔ)標(biāo)志初始值,除此,在內(nèi)存寫(xiě)入操作系統(tǒng)之后,該頭、尾檢查區(qū)域即可預(yù)先檢查出超出的存儲(chǔ)數(shù)據(jù),以避免邊界錯(cuò)誤(bounds violation),其處理步驟系包括有(31)讀出用戶(hù)的程序檢查存儲(chǔ)塊的地址為Addr;(32)頭端檢查位置(H_Addr)=Addr-4;狀態(tài)標(biāo)志(State_flag)=(*H_Addr)&0×0000ffff;尾端檢查位置(T_Addr)=Addr+存儲(chǔ)尺寸T;(33)檢查狀態(tài)標(biāo)志(State_flag)是否等于內(nèi)存標(biāo)志(MEM_FLAG),若結(jié)果為肯定時(shí),則執(zhí)行步驟(34);若結(jié)果為否定時(shí),則執(zhí)行步驟(35);(34)尾端檢查位置(*T_Addr)是否等于頭端檢查位置(*H_Addr)?,若結(jié)果為是時(shí),執(zhí)行步驟(38);若執(zhí)行結(jié)果為否定時(shí),則執(zhí)行步驟(36);(35)頭端數(shù)據(jù)失敗,繼續(xù)執(zhí)行步驟(37);(36)尾端數(shù)據(jù)失敗,繼續(xù)執(zhí)行步驟(37);(37)內(nèi)存寫(xiě)入檢查結(jié)果為失??;(38)設(shè)定標(biāo)志(Flag)=內(nèi)存初始標(biāo)志(MEM_INIT);設(shè)定尾端標(biāo)志(Tail Flag)=內(nèi)存初始標(biāo)志(MEM_INIT);(39)內(nèi)存寫(xiě)入檢查結(jié)果為成功。
請(qǐng)參閱圖4所示,是本發(fā)明的內(nèi)存讀取檢查的處理流程圖。
內(nèi)存讀取檢查在內(nèi)存的讀取時(shí),并不需要對(duì)頭、尾檢查區(qū)域之后做內(nèi)存存取,但對(duì)于確認(rèn)內(nèi)存的初始化后,該狀態(tài)標(biāo)志才能在被內(nèi)存讀取之前被檢查出來(lái),只有在存儲(chǔ)標(biāo)志初始狀態(tài),在內(nèi)存中的程序能被讀取,其處理步驟包括(41)用戶(hù)程序檢查內(nèi)存的位置范圍由Addr至Addr+Read_Size;(42)頭端地址H_Addr=Addr-4;狀態(tài)標(biāo)志(State_flag)=(頭端地址*H_Addr)&0×ffff0000;
存儲(chǔ)尺寸(Size)=(*H_Addr)&0×0000ffff;尾端地址(T_Addr)=Addr+Size;(43)檢查狀態(tài)標(biāo)志(State_flag)是否等于內(nèi)存初始標(biāo)志(MEM_FLAG_INT)?;若其結(jié)果為是時(shí),則執(zhí)行步驟(44);若其結(jié)果為否定時(shí),則執(zhí)行步驟(45);(44)程序讀到的內(nèi)存大?。荚阮A(yù)定大?。?;若其結(jié)果為肯定時(shí),則執(zhí)行步驟(48);若其結(jié)果為否定時(shí),則執(zhí)行步驟(46);(45)頭端數(shù)據(jù)失敗或內(nèi)存尚未初始化,繼續(xù)執(zhí)行步驟(47);(46)讀取存儲(chǔ)超過(guò)內(nèi)存的限制,繼續(xù)執(zhí)行步驟(47);(47)存儲(chǔ)讀取檢查返回失敗;(48)存儲(chǔ)讀取檢查返回成功。
請(qǐng)參閱圖5所示,是本發(fā)明的內(nèi)存釋放內(nèi)存的處理流程圖,存儲(chǔ)釋放在存儲(chǔ)被釋放的操作系統(tǒng),我們可檢查頭、尾端檢查區(qū)域由內(nèi)存存取確認(rèn)存儲(chǔ)塊范圍不被覆蓋(Overwritten),特別注意地,是存儲(chǔ)的寫(xiě)入檢查、存儲(chǔ)的讀取檢查及內(nèi)存的釋放,這些程序從用戶(hù)程序的內(nèi)存分配得到返回位置,和真實(shí)頭端地址是程序輸入位置減去4個(gè)字節(jié)(Bytes)而得到的,其處理步驟包括(51)用戶(hù)程序檢查存儲(chǔ)位置;(52)H_Addr=Addr-4;狀態(tài)標(biāo)志(State_flag)=(頭端地址*H_Addr)&0×ffff0000;存儲(chǔ)尺寸(Size)=(*H_Addr)&0×0000ffff;尾端地址(T_Addr)=Addr+Size;(53)檢查狀態(tài)標(biāo)志(State_flag)是否等于內(nèi)存標(biāo)志?,若其結(jié)果為肯定時(shí),則執(zhí)行步驟(54);若其結(jié)果為否定時(shí),則執(zhí)行步驟(55);(54)檢查尾端檢查位置(*T_Addr)是否等于頭端檢查位置(*H_Addr)?,若其結(jié)果為肯定時(shí),則執(zhí)行步驟(58);若其結(jié)果為否定時(shí),則執(zhí)行步驟(56);(55)頭端數(shù)據(jù)失敗,繼續(xù)執(zhí)行步驟(57);(56)尾端數(shù)據(jù)失敗,繼續(xù)執(zhí)行步驟(57);(57)存儲(chǔ)讀取檢查返回失?。?
(58)(頭端地址*H_Addr)=0;(尾端地址*T_Addr)=0;(59)存儲(chǔ)寫(xiě)入檢查返回成功。
通過(guò)以上圖1至圖5的公開(kāi),本發(fā)明提出一種簡(jiǎn)單的基本塊存儲(chǔ)裝置,利用非初始的存儲(chǔ)存取為基礎(chǔ),這種結(jié)構(gòu)不重新配任何重新定義檢查表記錄存儲(chǔ)數(shù)據(jù),程序也不檢查每一內(nèi)存組件,因此它是數(shù)字系統(tǒng)處理實(shí)時(shí)系統(tǒng)時(shí),預(yù)先對(duì)存儲(chǔ)存取錯(cuò)誤進(jìn)行糾錯(cuò)的最佳方法。
綜上所述,本發(fā)明的結(jié)構(gòu)特征和各實(shí)施例皆已詳細(xì)公開(kāi),可充分顯示出本發(fā)明的技術(shù)方案在目的及效果上具有可實(shí)施性,極具產(chǎn)業(yè)的利用價(jià)值,且為目前市面上前所未見(jiàn)的應(yīng)用,依照專(zhuān)利法的精神,本發(fā)明的技術(shù)方案完全符合發(fā)明專(zhuān)利的要求。
上述說(shuō)明僅為本發(fā)明的優(yōu)選實(shí)施例,不能以此限定本發(fā)明的實(shí)施范圍,即只要依本發(fā)明申請(qǐng)專(zhuān)利范圍所作的相同的改變和改進(jìn),都應(yīng)屬于本發(fā)明專(zhuān)利涵蓋的范圍內(nèi)。
權(quán)利要求
1.一種檢測(cè)內(nèi)存存取錯(cuò)誤的方法,在內(nèi)存存取分配區(qū)域之前端和后端,各加入頭端檢查區(qū)域及尾端檢查區(qū)域,該頭端檢查區(qū)與尾檢查區(qū)域各包括狀態(tài)標(biāo)志和內(nèi)存尺寸,利用該狀態(tài)標(biāo)志與該存儲(chǔ)尺寸,進(jìn)一步達(dá)到檢查內(nèi)存存取是否有錯(cuò)誤的信息。
2.如權(quán)利要求1所述的檢測(cè)內(nèi)存存取錯(cuò)誤的方法,其中該狀態(tài)標(biāo)志表示目前的內(nèi)存使用狀態(tài)。
3.如權(quán)利要求1所述的檢測(cè)內(nèi)存存取錯(cuò)誤的方法,其中該尾端檢查區(qū)域與該頭端檢查區(qū)域內(nèi)容相同。
4.如權(quán)利要求3所述的檢測(cè)內(nèi)存存取錯(cuò)誤的方法,其中該尾端檢查區(qū)域與該頭端檢查區(qū)域大小相同。
5.如權(quán)利要求1所述的檢測(cè)內(nèi)存存取錯(cuò)誤的方法,其中該頭、尾端檢查區(qū)域包括有內(nèi)存分配、存儲(chǔ)寫(xiě)入檢查、存儲(chǔ)讀取檢查及存儲(chǔ)釋放的步驟。
6.一種內(nèi)存分配測(cè)試的方法,其步驟包括(a1)當(dāng)程序需要存儲(chǔ)尺寸T的使用內(nèi)存時(shí),對(duì)內(nèi)存塊要求預(yù)定區(qū)域位置,該預(yù)定區(qū)域位置大小為該存儲(chǔ)尺寸T、頭端檢查區(qū)域大小與尾端檢查區(qū)域大小的和;(b1)該內(nèi)存塊向該程序返回可使用的響應(yīng);(c1)該程序在該預(yù)定區(qū)域位置內(nèi)增加頭端檢查區(qū),且設(shè)定該存儲(chǔ)尺寸=T,該使用內(nèi)存地址Addr;(d1)該程序在該預(yù)定區(qū)域位置內(nèi)增加尾端檢查區(qū);以及,(e1)內(nèi)存設(shè)定返回預(yù)定區(qū)域。
7.如權(quán)利要求6所述的內(nèi)存分配測(cè)試的方法,該步驟(c1)更包括有設(shè)定該頭端檢查區(qū)的狀態(tài)標(biāo)志(State_flag)為內(nèi)存未初始標(biāo)志的步驟。
8.如權(quán)利要求6所述的內(nèi)存分配測(cè)試的方法,該步驟(d1)更包括設(shè)定該尾端檢查區(qū)的狀態(tài)標(biāo)志(State_flag)為內(nèi)存未初始標(biāo)志。
9.如權(quán)利要求6所述的內(nèi)存分配測(cè)試的方法,其中該步驟(a1)更包括該內(nèi)存回復(fù)不可使用的響應(yīng),內(nèi)存分配的處理流程中斷的步驟。
10.如權(quán)利要求6所述的內(nèi)存分配測(cè)試的方法,其更包括下列步驟(a2)當(dāng)用戶(hù)的程序?qū)懭雰?nèi)存時(shí)檢查該預(yù)定區(qū)域位置;(b2)該頭端檢查區(qū)位置(H_Addr)=Addr-4;狀態(tài)標(biāo)志(State_flag)=(*H_Addr) & 0×0000ffff;該尾端檢查位置(T_Addr)=Addr+T;(c2)檢查狀態(tài)標(biāo)志(State_flag)是否與內(nèi)存標(biāo)志(MEM_FLAG)相等,若不相等則內(nèi)存寫(xiě)入失??;(d2)檢查尾端檢查位置(*T_Addr)是否與頭端檢查位置(*H_Addr)相等,若不相等則內(nèi)存寫(xiě)入失敗;(e2)設(shè)定標(biāo)志(Flag)=內(nèi)存初始標(biāo)志;尾端標(biāo)志(Tail Flag)=內(nèi)存初始標(biāo)志;(f2)內(nèi)存寫(xiě)入檢查結(jié)果為成功。
11.如權(quán)利要求6所述的內(nèi)存分配測(cè)試的方法,其更包括下列步驟(a3)該程序讀出該內(nèi)存中的讀取大小Read_Size;(b3)該頭端檢查區(qū)位置(H_Addr)=Addr-4,狀態(tài)標(biāo)志(State_flag)=(*H_Addr) & 0×ffff0000,T_Addr=Addr+T;(c3)狀態(tài)標(biāo)志(State_flag)=(*H_Addr) & 0×ffff0000;(d3)檢查狀態(tài)標(biāo)志(State_flag)是否等于內(nèi)存初始標(biāo)志?若不相等則內(nèi)存讀出失?。?e3)該讀取大小Read_Size是否小于存儲(chǔ)尺寸T?若不小于則內(nèi)存讀出失??;(f3)存儲(chǔ)寫(xiě)入檢查返回成功。
12.如權(quán)利要求6所述的內(nèi)存分配測(cè)試的方法,其更包括下列步驟(a4)該程序開(kāi)始釋放該使用內(nèi)存;(b4)H_Addr=Addr-4;狀態(tài)標(biāo)志(State_flag)=(*H_Addr) & 0×ffff0000;T_Addr=Addr+T;(c4)檢查狀態(tài)標(biāo)志(State_flag)是否等于內(nèi)存初始標(biāo)志?若不相等則內(nèi)存釋放失??;(d4)尾端檢查位置(*T_Addr)是否等于頭端檢查位置(*H_Addr)?若不相等則內(nèi)存釋放失?。灰约?e4)內(nèi)存釋放返回成功。
全文摘要
本發(fā)明是一種檢測(cè)內(nèi)存存取錯(cuò)誤的方法,在內(nèi)存存取保護(hù)區(qū)域之前后端各插入頭端檢查區(qū)域和尾端檢查區(qū)域,當(dāng)系統(tǒng)存取的數(shù)據(jù)超過(guò)預(yù)定數(shù)據(jù)的大小時(shí),會(huì)造成內(nèi)存存取錯(cuò)誤的問(wèn)題,本發(fā)明利用在預(yù)定數(shù)據(jù)位置的前、后端,各加入頭端檢查區(qū)域和尾端檢查區(qū)域,而頭、尾端檢查區(qū)域的數(shù)據(jù)大小必須吻合,本發(fā)明可應(yīng)用于子程序的編寫(xiě),而受到父程序調(diào)用而產(chǎn)生動(dòng)作,進(jìn)一步達(dá)到檢查內(nèi)存存取是否有錯(cuò)誤的信息。
文檔編號(hào)G06F11/36GK1567235SQ0314893
公開(kāi)日2005年1月19日 申請(qǐng)日期2003年6月24日 優(yōu)先權(quán)日2003年6月24日
發(fā)明者陳建瑜 申請(qǐng)人:明基電通股份有限公司