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

寬帶載波內(nèi)存管理算法的制作方法

文檔序號:12664939閱讀:219來源:國知局
寬帶載波內(nèi)存管理算法的制作方法與工藝

本發(fā)明涉及內(nèi)存管理技術(shù)領(lǐng)域,具體涉及寬帶載波內(nèi)存管理算法。



背景技術(shù):

寬帶載波模塊要管理最大2040個從節(jié)點。而且還有各種抄表任務(wù),都需動態(tài)審請內(nèi)存。在嵌入式系統(tǒng)中,內(nèi)存一般都比較小,內(nèi)存資源十分緊張。嵌入式軟件開發(fā)者在開發(fā)程序時總是要斤斤計較,以盡可能節(jié)省的方式使用內(nèi)存,避免內(nèi)存的浪費,從而在這方面花費了過多的精力。現(xiàn)有內(nèi)存管理易產(chǎn)生內(nèi)存碎片,碎片較多時,會耗盡內(nèi)存,如果碎片累計到極端的情況下可能導(dǎo)致沒有內(nèi)存可用,最終導(dǎo)致程序癱瘓,系統(tǒng)崩潰的災(zāi)難后果。



技術(shù)實現(xiàn)要素:

本發(fā)明是為了解決現(xiàn)有內(nèi)存易于產(chǎn)生碎片的不足,提供一種不易于產(chǎn)生碎片,內(nèi)存使用狀態(tài)的檢測區(qū)域小,并能快速檢測內(nèi)存使用狀態(tài)的寬帶載波內(nèi)存管理算法。

為了實現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:

寬帶載波內(nèi)存管理算法,內(nèi)存管理算法包括內(nèi)存初始化、內(nèi)存申請、內(nèi)存釋放和內(nèi)存狀態(tài)查看;

步驟(1)內(nèi)存初始化

先將整塊內(nèi)存分成兩部分內(nèi)存,設(shè)這兩部分內(nèi)存分別為內(nèi)存區(qū)A和內(nèi)存區(qū)B,并且內(nèi)存區(qū)A的內(nèi)存容量小于內(nèi)存區(qū)B的內(nèi)存容量;

步驟(2)內(nèi)存申請

步驟(1-2-1)在程序申請使用內(nèi)存時,先查看內(nèi)存區(qū)A中是否有內(nèi)存可用,再查看程序要申請的內(nèi)存容量;

步驟(1-2-2)如果內(nèi)存區(qū)A中沒有內(nèi)存可用,則將內(nèi)存區(qū)A中正在運行的一個程序的一段程序段轉(zhuǎn)移到內(nèi)存區(qū)B中去使用內(nèi)存,然后跳轉(zhuǎn)到步驟(1-2-5),

步驟(1-2-4)如果內(nèi)存區(qū)A中有內(nèi)存可用,

步驟(1-2-5)則判斷內(nèi)存區(qū)A中可用的內(nèi)存容量是否大于或等于程序要申請的內(nèi)存容量;

如果內(nèi)存區(qū)A中可用的內(nèi)存容量大于或等于程序要申請的內(nèi)存容量,則程序直接向內(nèi)存區(qū)A申請使用內(nèi)存;

如果內(nèi)存區(qū)A中可用的內(nèi)存容量小于程序要申請的內(nèi)存容量,

則程序先將內(nèi)存區(qū)A中可用的內(nèi)存申請用完,再將程序要申請的內(nèi)存所剩下的內(nèi)存向內(nèi)存區(qū)B申請內(nèi)存使用;

在程序申請到內(nèi)存使用后,還需要對該程序所占用的內(nèi)存地址進行編號,并設(shè)定該程序占用該內(nèi)存地址的最大時間;

步驟(3)內(nèi)存釋放

在程序占用內(nèi)存地址的最大時間以內(nèi)釋放該程序占用的內(nèi)存地址;

步驟(4)內(nèi)存狀態(tài)查看

根據(jù)程序占用內(nèi)存地址的最大時間查看該程序占用內(nèi)存的狀態(tài),如果程序占用內(nèi)存地址的時間超過該程序占用內(nèi)存地址的最大時間,說明此內(nèi)存地址上的內(nèi)存沒有釋放,則需要檢測此內(nèi)存是否忘記釋放,如果檢測到此內(nèi)存是忘記釋放則進行自動釋放,如果檢測到此內(nèi)存并沒有忘記釋放則等待此內(nèi)存釋放。

本方案的內(nèi)存管理算法是讓每個要在內(nèi)存中運行的程序都有一段程序段在內(nèi)存區(qū)A內(nèi)運行,只要檢測內(nèi)存區(qū)A內(nèi)的內(nèi)存使用狀態(tài)就能夠知道整塊內(nèi)存的使用狀態(tài),實現(xiàn)不易于產(chǎn)生碎片,內(nèi)存使用狀態(tài)的檢測區(qū)域小,能快速檢測內(nèi)存使用狀態(tài)的目的。本方案的內(nèi)存管理算法簡單易用,簡潔高效,并且不會產(chǎn)生內(nèi)存碎片,而且還能快速檢測內(nèi)存使用狀態(tài),為嵌入式系統(tǒng)開發(fā)人員快速檢測內(nèi)存使用狀態(tài)提供了極大的方便。內(nèi)存使用狀態(tài)的檢測區(qū)域小,只要檢測內(nèi)存區(qū)A中是否有程序在使用即能快速知道整個內(nèi)存的使用狀態(tài)。

本方案中,若干個程序在使用內(nèi)存時,讓每個程序的一部分程序段或者全部程序段都要使用內(nèi)存區(qū)A中的內(nèi)存;在任意一個程序要退出內(nèi)存使用時,讓要退出的這個程序位于內(nèi)存區(qū)A中的這部分程序段或者全部程序段都跟著全部退出,所以我們只要檢測內(nèi)存區(qū)A中是否有程序在使用即能快速知道整個內(nèi)存的使用狀態(tài)。

作為優(yōu)選,步驟(2-1)設(shè)內(nèi)存區(qū)A的容量大小為H,設(shè)內(nèi)存區(qū)B的容量大小為U;若設(shè)內(nèi)存區(qū)A的容量大小是一個由N個存儲塊組成的二維數(shù)組,設(shè)內(nèi)存區(qū)B的容量大小也是一個由M個存儲塊組成二維數(shù)組,若每個存儲塊的最小存儲容量就是該存儲塊的最小內(nèi)存單位C,則內(nèi)存區(qū)A的容量大小H=N×C,內(nèi)存區(qū)B的容量大小U=M×C;

設(shè)程序要申請的內(nèi)存容量大小為J,并設(shè)程序在申請內(nèi)存使用時,在內(nèi)存區(qū)A中還有可用的內(nèi)存容量大小為K,并且0≤K≤H,0≤J≤H+U;

步驟(2-2)程序在申請使用內(nèi)存時,先查看內(nèi)存區(qū)A中可用內(nèi)存容量大小K,再查看程序要申請的內(nèi)存容量大小J;

步驟(2-3)當K=0時,

步驟(2-4)則先將內(nèi)存區(qū)A中正在運行的一個程序的一段程序段轉(zhuǎn)移到內(nèi)存區(qū)B中去使用內(nèi)存,從而讓內(nèi)存區(qū)A中有可用的內(nèi)存容量,并且此時內(nèi)存區(qū)A中可用的內(nèi)存容量K>0,然后跳轉(zhuǎn)到步驟(2-6),

步驟(2-5)當K>0時,

步驟(2-6)如果程序要申請的內(nèi)存容量大小J≤內(nèi)存區(qū)A中可用的內(nèi)存容量大小K時,則程序直接向內(nèi)存區(qū)A申請使用內(nèi)存;

如果程序要申請的內(nèi)存容量大小J>內(nèi)存區(qū)A中可用的容量大小K時,

則程序先向內(nèi)存區(qū)A申請使用內(nèi)存,并將內(nèi)存區(qū)A中可用的容量大小K全部申請用完,然后程序再向內(nèi)存區(qū)B申請使用內(nèi)存,并且此時程序要向內(nèi)存區(qū)B申請使用的內(nèi)存容量大小為J-K。

作為優(yōu)選,定義一個二維數(shù)組作為內(nèi)存管理區(qū),并用該二維數(shù)組的一行表示一個內(nèi)存容量大小的最小存儲單元,則該內(nèi)存管理區(qū)的內(nèi)存容量大小就等于該二維數(shù)組的行數(shù)個最小存儲單元,二維數(shù)組每行的內(nèi)存容量大小等于該二維數(shù)組的列數(shù)大小,以二維數(shù)組的每一行作為一個最小的申請單元,行數(shù)和列數(shù)根據(jù)程序的需要進行調(diào)整;定義的二維數(shù)組包括定義二維數(shù)組的行數(shù)、定義二維數(shù)組的列數(shù)和定義靜態(tài)的二維數(shù)組;再定義靜態(tài)的一維數(shù)組,并且一維數(shù)組的元素個數(shù)與二維數(shù)組的行數(shù)一一對應(yīng);用該一維數(shù)組的元素來記錄所述二維數(shù)組的行數(shù)申請情況的行位置編號標記;在內(nèi)存申請時,是從二維數(shù)組中申請一定的行數(shù),然后將相應(yīng)的行數(shù)進行位置編號標記;具體是從已經(jīng)定義的二維數(shù)組中申請一定的內(nèi)存容量,然后返回申請到的內(nèi)存容量在二維數(shù)組中的行位置,同時將該行位置編號標記在二維數(shù)組中相應(yīng)位置處做好記錄,并在一維數(shù)組中將相應(yīng)的行位置記錄處進行位置編號標記;在內(nèi)存釋放時,是將一維數(shù)組中相應(yīng)的行位置記錄處的行位置編號標記清零即可實現(xiàn)行位置對應(yīng)的內(nèi)存釋放;在內(nèi)存狀態(tài)查看時,因為程序申請內(nèi)存使用時是按行位置編號標記的,所以每次程序?qū)徴垉?nèi)存使用時都清楚它的編號;由于程序占用內(nèi)存地址的最大時間在編寫程序時已經(jīng)設(shè)定,如果程序占用內(nèi)存的時間超過該程序規(guī)定的最大占用時間,則判斷該程序長時間沒有釋放,內(nèi)存會自己檢測該程序占用的內(nèi)存是否忘記釋放,然后進行內(nèi)存自動釋放;通過實時查看和不斷的監(jiān)測行位置編號標記,即可知道程序中是否有申請過內(nèi)存而長時間沒有進行釋放的情況;通過統(tǒng)計每次內(nèi)存申請時從二維數(shù)組中申請的行數(shù)和最大一次申請行數(shù),就能獲得內(nèi)存的使用情況。

作為優(yōu)選,分別設(shè)置內(nèi)存初始化的統(tǒng)一對外接口函數(shù)、內(nèi)存申請的統(tǒng)一對外接口函數(shù)、內(nèi)存釋放的統(tǒng)一對外接口函數(shù)和內(nèi)存狀態(tài)查看的統(tǒng)一對外接口函數(shù);程序只需使用這四個統(tǒng)一對外接口函數(shù)即可進行內(nèi)存初始化、內(nèi)存申請、內(nèi)存釋放和內(nèi)存狀態(tài)查看。

作為優(yōu)選,設(shè)任意程序所占用的內(nèi)存地址編號為Li,其中i=0,1,2,3,-----;還設(shè)任意程序所占用的內(nèi)存地址Li的最大時間為T;在步驟(4)中,如果檢測到此內(nèi)存并沒有忘記釋放則等待內(nèi)存釋放,則在使用該內(nèi)存地址的程序設(shè)定的占用該內(nèi)存地址的最大時間T的2倍時間時強制釋放該內(nèi)存地址。

作為優(yōu)選,所述內(nèi)存區(qū)A由若干個扇區(qū)組成,如果前一個程序已經(jīng)將內(nèi)存區(qū)A中可用的內(nèi)存申請用完,并且前一個程序占據(jù)了內(nèi)存區(qū)A中的至少兩個扇區(qū),當有后一個程序要向內(nèi)存區(qū)A申請內(nèi)存使用時,則先將前一個程序位于內(nèi)存區(qū)A內(nèi)一個扇區(qū)中使用的內(nèi)存內(nèi)的這段程序轉(zhuǎn)移到內(nèi)存區(qū)B中去使用,然后再讓后一個程序申請使用內(nèi)存區(qū)A內(nèi)前一個程序轉(zhuǎn)移后釋放的這個扇區(qū)內(nèi)的內(nèi)存。

作為優(yōu)選,所述內(nèi)存區(qū)A由扇區(qū)P1、扇區(qū)P2和扇區(qū)P3組成,設(shè)程序包括程序Q1、程序Q2、程序Q3和程序Q4,并且設(shè)程序Q1、程序Q2、程序Q3、程序Q4和程序Q5依次向內(nèi)存區(qū)A申請使用內(nèi)存;如果程序Q1先向內(nèi)存區(qū)A申請使用內(nèi)存,并且此時的扇區(qū)P1、扇區(qū)P2和扇區(qū)P3都已經(jīng)被程序Q1申請用完了,若當程序Q2向內(nèi)存區(qū)A申請使用內(nèi)存時,則需要先將程序Q1位于扇區(qū)P2中的程序段轉(zhuǎn)移到內(nèi)存區(qū)B中去使用內(nèi)存,然后再將扇區(qū)P2內(nèi)的內(nèi)存給程序Q2使用;如果扇區(qū)P2內(nèi)的內(nèi)存不夠程序Q2使用時,則程序Q2還需將超出部分的程序段向內(nèi)存區(qū)B中去使用內(nèi)存;如果在程序Q1和程序Q2都還沒有釋放內(nèi)存,并且在程序Q2已經(jīng)用完扇區(qū)P2內(nèi)的內(nèi)存的情況下,若程序Q3向內(nèi)存區(qū)A申請使用內(nèi)存時,則先將程序Q1位于扇區(qū)P3中的程序段轉(zhuǎn)移到內(nèi)存區(qū)B中去申請使用內(nèi)存,然后再將扇區(qū)P3內(nèi)的內(nèi)存給程序Q3使用;如果扇區(qū)P3內(nèi)的內(nèi)存不夠程序Q3用時,則程序Q3還需將超出部分的程序段向內(nèi)存區(qū)B中去申請使用內(nèi)存;如果程序Q1和程序Q2都還沒有釋放內(nèi)存,并且程序Q2沒有用完扇區(qū)P2內(nèi)的內(nèi)存的情況下,若程序Q3向內(nèi)存區(qū)A申請使用內(nèi)存時,則將扇區(qū)P2內(nèi)剩下的內(nèi)存給程序Q3用,如果扇區(qū)P2內(nèi)剩下的內(nèi)存不夠程序Q3用時,程序Q3還需將超出部分程序段向內(nèi)存區(qū)B中去申請使用內(nèi)存;如果在程序Q1、程序Q2和程序Q3都還沒有釋放內(nèi)存,并且程序Q1完全占用了扇區(qū)P1內(nèi)的內(nèi)存,程序Q2完全占用了扇區(qū)P2內(nèi)的內(nèi)存,程序Q3完全占用了扇區(qū)P3內(nèi)的內(nèi)存,若程序Q4和程序Q5都依次向內(nèi)存區(qū)A申請使用內(nèi)存時,則程序Q4和程序Q5排隊等待,當內(nèi)存區(qū)A有了可用的內(nèi)存時再將內(nèi)存區(qū)A內(nèi)可用的內(nèi)存依次給程序Q4和程序Q5使用。

本方案在使用時,只需要檢測內(nèi)存區(qū)A內(nèi)是否有程序在使用即可實時知道內(nèi)存的使用狀態(tài)。由于不需要對整塊內(nèi)存區(qū)域進行檢測,只需要對內(nèi)存區(qū)A內(nèi)是否有程序在運行進行檢測,內(nèi)存使用狀態(tài)的檢測區(qū)域小,能快速檢測內(nèi)存的使用狀態(tài),大大提高了檢測速度,靈敏度高。

本發(fā)明能夠達到如下效果:

本發(fā)明的內(nèi)存管理算法簡單易用,簡潔高效,不易產(chǎn)生內(nèi)存碎片,而且還能快速檢測內(nèi)存的使用狀態(tài),為嵌入式系統(tǒng)開發(fā)人員快速檢測內(nèi)存使用狀態(tài)提供了極大的方便。當監(jiān)測到一塊內(nèi)存長時間沒有釋放,內(nèi)存系統(tǒng)會自己檢測此內(nèi)存是否忘記釋放,自動釋放,以便內(nèi)存做更好的優(yōu)化和調(diào)整。在使用時,只需要檢測內(nèi)存區(qū)A內(nèi)是否有程序在使用即可實時知道內(nèi)存的使用狀態(tài)。由于不需要對整塊內(nèi)存區(qū)域進行檢測,只需要對內(nèi)存區(qū)A內(nèi)是否有程序在運行進行檢測,內(nèi)存使用狀態(tài)的檢測區(qū)域小,能快速檢測內(nèi)存的使用狀態(tài),大大提高了檢測速度,靈敏度高,可靠性好。

附圖說明

圖1是本發(fā)明程序從二維數(shù)組中連續(xù)申請了3個單元(即二維數(shù)組中的3行)、箭頭指向申請到的內(nèi)存的起始地址的一種示意圖。

圖2是本發(fā)明一維數(shù)組中寫上相應(yīng)的位置編號標記(即二維數(shù)組中的行號)的一種示意圖。

圖3是本發(fā)明一維數(shù)組中相應(yīng)的位置編號標記清零的一種示意圖。

圖4是本發(fā)明整塊內(nèi)存分成內(nèi)存區(qū)A和內(nèi)存區(qū)B,以及內(nèi)存區(qū)A由扇區(qū)P1、扇區(qū)P2和扇區(qū)P3組成的一種連接結(jié)構(gòu)示意圖。

具體實施方式

下面通過實施例,并結(jié)合附圖,對本發(fā)明的技術(shù)方案作進一步具體的說明。

實施例:寬帶載波內(nèi)存管理算法,參見圖1、圖2、圖3、圖4所示,內(nèi)存管理算法包括內(nèi)存初始化、內(nèi)存申請、內(nèi)存釋放和內(nèi)存狀態(tài)查看;

步驟(1)內(nèi)存初始化

先將整塊內(nèi)存分成兩部分內(nèi)存,設(shè)這兩部分內(nèi)存分別為內(nèi)存區(qū)A和內(nèi)存區(qū)B,并且內(nèi)存區(qū)A的內(nèi)存容量小于內(nèi)存區(qū)B的內(nèi)存容量;

步驟(2)內(nèi)存申請

步驟(1-2-1)在程序申請使用內(nèi)存時,先查看內(nèi)存區(qū)A中是否有內(nèi)存可用,再查看程序要申請的內(nèi)存容量;

步驟(1-2-2)如果內(nèi)存區(qū)A中沒有內(nèi)存可用,則將內(nèi)存區(qū)A中正在運行的一個程序的一段程序段轉(zhuǎn)移到內(nèi)存區(qū)B中去使用內(nèi)存,然后跳轉(zhuǎn)到步驟(1-2-5),

步驟(1-2-4)如果內(nèi)存區(qū)A中有內(nèi)存可用,

步驟(1-2-5)則判斷內(nèi)存區(qū)A中可用的內(nèi)存容量是否大于或等于程序要申請的內(nèi)存容量;

如果內(nèi)存區(qū)A中可用的內(nèi)存容量大于或等于程序要申請的內(nèi)存容量,則程序直接向內(nèi)存區(qū)A申請使用內(nèi)存;

如果內(nèi)存區(qū)A中可用的內(nèi)存容量小于程序要申請的內(nèi)存容量,

則程序先將內(nèi)存區(qū)A中可用的內(nèi)存申請用完,再將程序要申請的內(nèi)存所剩下的內(nèi)存向內(nèi)存區(qū)B申請內(nèi)存使用;

在程序申請到內(nèi)存使用后,還需要對該程序所占用的內(nèi)存地址進行編號,并設(shè)定該程序占用該內(nèi)存地址的最大時間;

步驟(3)內(nèi)存釋放

在程序占用內(nèi)存地址的最大時間以內(nèi)釋放該程序占用的內(nèi)存地址;

步驟(4)內(nèi)存狀態(tài)查看

根據(jù)程序占用內(nèi)存地址的最大時間查看該程序占用內(nèi)存的狀態(tài),如果程序占用內(nèi)存地址的時間超過該程序占用內(nèi)存地址的最大時間,說明此內(nèi)存地址上的內(nèi)存沒有釋放,則需要檢測此內(nèi)存是否忘記釋放,如果檢測到此內(nèi)存是忘記釋放則進行自動釋放,如果檢測到此內(nèi)存并沒有忘記釋放則等待此內(nèi)存釋放。

步驟(2-1)設(shè)內(nèi)存區(qū)A的容量大小為H,設(shè)內(nèi)存區(qū)B的容量大小為U;若設(shè)內(nèi)存區(qū)A的容量大小是一個由N個存儲塊組成的二維數(shù)組,設(shè)內(nèi)存區(qū)B的容量大小也是一個由M個存儲塊組成二維數(shù)組,若每個存儲塊的最小存儲容量就是該存儲塊的最小內(nèi)存單位C,則內(nèi)存區(qū)A的容量大小H=N×C,內(nèi)存區(qū)B的容量大小U=M×C;

設(shè)程序要申請的內(nèi)存容量大小為J,并設(shè)程序在申請內(nèi)存使用時,在內(nèi)存區(qū)A中還有可用的內(nèi)存容量大小為K,并且0≤K≤H,0≤J≤H+U;

步驟(2-2)程序在申請使用內(nèi)存時,先查看內(nèi)存區(qū)A中可用內(nèi)存容量大小K,再查看程序要申請的內(nèi)存容量大小J;

步驟(2-3)當K=0時,

步驟(2-4)則先將內(nèi)存區(qū)A中正在運行的一個程序的一段程序段轉(zhuǎn)移到內(nèi)存區(qū)B中去使用內(nèi)存,從而讓內(nèi)存區(qū)A中有可用的內(nèi)存容量,并且此時內(nèi)存區(qū)A中可用的內(nèi)存容量K>0,然后跳轉(zhuǎn)到步驟(2-6),

步驟(2-5)當K>0時,

步驟(2-6)如果程序要申請的內(nèi)存容量大小J≤內(nèi)存區(qū)A中可用的內(nèi)存容量大小K時,則程序直接向內(nèi)存區(qū)A申請使用內(nèi)存;

如果程序要申請的內(nèi)存容量大小J>內(nèi)存區(qū)A中可用的容量大小K時,

則程序先向內(nèi)存區(qū)A申請使用內(nèi)存,并將內(nèi)存區(qū)A中可用的容量大小K全部申請用完,然后程序再向內(nèi)存區(qū)B申請使用內(nèi)存,并且此時程序要向內(nèi)存區(qū)B申請使用的內(nèi)存容量大小為J-K。

定義一個二維數(shù)組作為內(nèi)存管理區(qū),并用該二維數(shù)組的一行表示一個內(nèi)存容量大小的最小存儲單元,則該內(nèi)存管理區(qū)的內(nèi)存容量大小就等于該二維數(shù)組的行數(shù)個最小存儲單元,二維數(shù)組每行的內(nèi)存容量大小等于該二維數(shù)組的列數(shù)大小,以二維數(shù)組的每一行作為一個最小的申請單元,行數(shù)和列數(shù)根據(jù)程序的需要進行調(diào)整;

定義的二維數(shù)組包括定義二維數(shù)組的行數(shù)、定義二維數(shù)組的列數(shù)和定義靜態(tài)的二維數(shù)組;再定義靜態(tài)的一維數(shù)組,并且一維數(shù)組的元素個數(shù)與二維數(shù)組的行數(shù)一一對應(yīng);用該一維數(shù)組的元素來記錄所述二維數(shù)組的行數(shù)申請情況的行位置編號標記;

在內(nèi)存申請時,是從二維數(shù)組中申請一定的行數(shù),然后將相應(yīng)的行數(shù)進行位置編號標記;具體是從已經(jīng)定義的二維數(shù)組中申請一定的內(nèi)存容量,然后返回申請到的內(nèi)存容量在二維數(shù)組中的行位置,同時將該行位置編號標記在二維數(shù)組中相應(yīng)位置處做好記錄,并在一維數(shù)組中將相應(yīng)的行位置記錄處進行位置編號標記;

在內(nèi)存釋放時,是將一維數(shù)組中相應(yīng)的行位置記錄處的行位置編號標記清零即可實現(xiàn)行位置對應(yīng)的內(nèi)存釋放;

在內(nèi)存狀態(tài)查看時,因為程序申請內(nèi)存使用時是按行位置編號標記的,所以每次程序?qū)徴垉?nèi)存使用時都清楚它的編號;由于程序占用內(nèi)存地址的最大時間在編寫程序時已經(jīng)設(shè)定,如果程序占用內(nèi)存的時間超過該程序規(guī)定的最大占用時間,則判斷該程序長時間沒有釋放,內(nèi)存會自己檢測該程序占用的內(nèi)存是否忘記釋放,然后進行內(nèi)存自動釋放;

通過實時查看和不斷的監(jiān)測行位置編號標記,即可知道程序中是否有申請過內(nèi)存而長時間沒有進行釋放的情況;

通過統(tǒng)計每次內(nèi)存申請時從二維數(shù)組中申請的行數(shù)和最大一次申請行數(shù),就能獲得內(nèi)存的使用情況。

分別設(shè)置內(nèi)存初始化的統(tǒng)一對外接口函數(shù)、內(nèi)存申請的統(tǒng)一對外接口函數(shù)、內(nèi)存釋放的統(tǒng)一對外接口函數(shù)和內(nèi)存狀態(tài)查看的統(tǒng)一對外接口函數(shù);程序只需使用這四個統(tǒng)一對外接口函數(shù)即可進行內(nèi)存初始化、內(nèi)存申請、內(nèi)存釋放和內(nèi)存狀態(tài)查看。

設(shè)任意程序所占用的內(nèi)存地址編號為Li,其中i=0,1,2,3,-----;還設(shè)任意程序所占用的內(nèi)存地址Li的最大時間為T;在步驟(4)中,如果檢測到此內(nèi)存并沒有忘記釋放則等待內(nèi)存釋放,則在使用該內(nèi)存地址的程序設(shè)定的占用該內(nèi)存地址的最大時間T的2倍時間時強制釋放該內(nèi)存地址。

所述內(nèi)存區(qū)A由若干個扇區(qū)組成,如果前一個程序已經(jīng)將內(nèi)存區(qū)A中可用的內(nèi)存申請用完,并且前一個程序占據(jù)了內(nèi)存區(qū)A中的至少兩個扇區(qū),當有后一個程序要向內(nèi)存區(qū)A申請內(nèi)存使用時,則先將前一個程序位于內(nèi)存區(qū)A內(nèi)一個扇區(qū)中使用的內(nèi)存內(nèi)的這段程序轉(zhuǎn)移到內(nèi)存區(qū)B中去使用,然后再讓后一個程序申請使用內(nèi)存區(qū)A內(nèi)前一個程序轉(zhuǎn)移后釋放的這個扇區(qū)內(nèi)的內(nèi)存。

所述內(nèi)存區(qū)A由扇區(qū)P1、扇區(qū)P2和扇區(qū)P3組成,設(shè)程序包括程序Q1、程序Q2、程序Q3和程序Q4,并且設(shè)程序Q1、程序Q2、程序Q3、程序Q4和程序Q5依次向內(nèi)存區(qū)A申請使用內(nèi)存;

如果程序Q1先向內(nèi)存區(qū)A申請使用內(nèi)存,并且此時的扇區(qū)P1、扇區(qū)P2和扇區(qū)P3都已經(jīng)被程序Q1申請用完了,若當程序Q2向內(nèi)存區(qū)A申請使用內(nèi)存時,則需要先將程序Q1位于扇區(qū)P2中的程序段轉(zhuǎn)移到內(nèi)存區(qū)B中去使用內(nèi)存,然后再將扇區(qū)P2內(nèi)的內(nèi)存給程序Q2使用;

如果扇區(qū)P2內(nèi)的內(nèi)存不夠程序Q2使用時,則程序Q2還需將超出部分的程序段向內(nèi)存區(qū)B中去使用內(nèi)存;

如果在程序Q1和程序Q2都還沒有釋放內(nèi)存,并且在程序Q2已經(jīng)用完扇區(qū)P2內(nèi)的內(nèi)存的情況下,若程序Q3向內(nèi)存區(qū)A申請使用內(nèi)存時,則先將程序Q1位于扇區(qū)P3中的程序段轉(zhuǎn)移到內(nèi)存區(qū)B中去申請使用內(nèi)存,然后再將扇區(qū)P3內(nèi)的內(nèi)存給程序Q3使用;

如果扇區(qū)P3內(nèi)的內(nèi)存不夠程序Q3用時,則程序Q3還需將超出部分的程序段向內(nèi)存區(qū)B中去申請使用內(nèi)存;

如果程序Q1和程序Q2都還沒有釋放內(nèi)存,并且程序Q2沒有用完扇區(qū)P2內(nèi)的內(nèi)存的情況下,若程序Q3向內(nèi)存區(qū)A申請使用內(nèi)存時,則將扇區(qū)P2內(nèi)剩下的內(nèi)存給程序Q3用,如果扇區(qū)P2內(nèi)剩下的內(nèi)存不夠程序Q3用時,程序Q3還需將超出部分程序段向內(nèi)存區(qū)B中去申請使用內(nèi)存;

如果在程序Q1、程序Q2和程序Q3都還沒有釋放內(nèi)存,并且程序Q1完全占用了扇區(qū)P1內(nèi)的內(nèi)存,程序Q2完全占用了扇區(qū)P2內(nèi)的內(nèi)存,程序Q3完全占用了扇區(qū)P3內(nèi)的內(nèi)存,若程序Q4和程序Q5都依次向內(nèi)存區(qū)A申請使用內(nèi)存時,則程序Q4和程序Q5排隊等待,當內(nèi)存區(qū)A有了可用的內(nèi)存時再將內(nèi)存區(qū)A內(nèi)可用的內(nèi)存依次給程序Q4和程序Q5使用。

本實施例是讓每個要在內(nèi)存中運行的程序都有一段程序段在內(nèi)存區(qū)A內(nèi)運行,只要檢測內(nèi)存區(qū)A內(nèi)的內(nèi)存使用狀態(tài)就能夠知道整塊內(nèi)存的使用狀態(tài),實現(xiàn)不易于產(chǎn)生碎片,內(nèi)存使用狀態(tài)的檢測區(qū)域小,能快速檢測內(nèi)存使用狀態(tài)的目的。本實施例的內(nèi)存管理算法簡單易用,簡潔高效,不易產(chǎn)生內(nèi)存碎片,而且還能快速檢測內(nèi)存的使用狀態(tài),為嵌入式系統(tǒng)開發(fā)人員快速檢測內(nèi)存使用狀態(tài)提供了極大的方便。當監(jiān)測到一塊內(nèi)存長時間沒有釋放,內(nèi)存系統(tǒng)會自己檢測此內(nèi)存是否忘記釋放,自動釋放,以便內(nèi)存做更好的優(yōu)化和調(diào)整。在使用時,只需要檢測內(nèi)存區(qū)A內(nèi)是否有程序在使用即可實時知道整個內(nèi)存的使用狀態(tài)。

在本實施例中,若干個程序在使用內(nèi)存時,讓每個程序的一部分程序段或者全部程序段都要使用內(nèi)存區(qū)A中的內(nèi)存;在任意一個程序要退出內(nèi)存使用時,讓要退出的這個程序位于內(nèi)存區(qū)A中的這部分程序段或者全部程序段都跟著全部退出,所以我們只要檢測內(nèi)存區(qū)A中是否有程序在使用即能快速知道整個內(nèi)存的使用狀態(tài)。由于不需要對整塊內(nèi)存區(qū)域進行檢測,只需要對內(nèi)存區(qū)A內(nèi)是否有程序在運行進行檢測,內(nèi)存使用狀態(tài)的檢測區(qū)域小,能快速檢測內(nèi)存的使用狀態(tài),大大提高了檢測速度,靈敏度高,可靠性好。

上面結(jié)合附圖描述了本發(fā)明的實施方式,但實現(xiàn)時不受上述實施例限制,本領(lǐng)域普通技術(shù)人員可以在所附權(quán)利要求的范圍內(nèi)做出各種變化或修改。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1