儲(chǔ)單元被使用后消失。
[0067]本申請實(shí)施例中,檢測第一任務(wù)堆棧中的標(biāo)識(shí)數(shù)據(jù),并輸出檢測結(jié)果,標(biāo)識(shí)數(shù)據(jù)是對任務(wù)堆棧的每個(gè)存儲(chǔ)單元都寫入用于標(biāo)識(shí)存儲(chǔ)單元未被使用的數(shù)據(jù),如OxAA。在操作系統(tǒng)啟動(dòng)階段,自動(dòng)對存儲(chǔ)單元進(jìn)行標(biāo)識(shí)數(shù)據(jù)的填充,也就是從任務(wù)對應(yīng)的任務(wù)堆桟的起始地址開始,對每個(gè)存儲(chǔ)單元中都寫入相同的標(biāo)識(shí)數(shù)據(jù),如OxAA,直至任務(wù)堆棧的棧頂?shù)刂窞橹埂?br>[0068]當(dāng)任務(wù)執(zhí)行時(shí),任務(wù)的相關(guān)數(shù)據(jù)會(huì)使用存儲(chǔ)單元,因此,標(biāo)識(shí)數(shù)據(jù)會(huì)被覆蓋,如果標(biāo)識(shí)數(shù)據(jù)消失,則代表存儲(chǔ)單元被任務(wù)所使用。根據(jù)檢測第一任務(wù)堆棧中的標(biāo)識(shí)數(shù)據(jù)的檢測結(jié)果,來計(jì)算第一任務(wù)對于第一任務(wù)堆棧的第一實(shí)際使用量,就可以精確得到任務(wù)使用。
[0069]當(dāng)然,檢測第一任務(wù)對于第一任務(wù)堆棧的第一實(shí)際使用量還可以使用其他的方式,在操作系統(tǒng)啟動(dòng)階段,將所有存儲(chǔ)單元都初始化為0,然后檢測存儲(chǔ)單元中不為O的數(shù)量,來計(jì)算第一實(shí)際使用量。當(dāng)然,這種方式并不如使用標(biāo)識(shí)數(shù)據(jù)的方式得到的結(jié)果準(zhǔn)確。本申請實(shí)施例中優(yōu)選使用檢測第一任務(wù)堆棧的標(biāo)識(shí)數(shù)據(jù)的方式來計(jì)算第一實(shí)際使用量。
[0070]S203、以第一任務(wù)對于第一任務(wù)堆棧的第一實(shí)際使用量為基準(zhǔn),設(shè)置第一任務(wù)堆棧的第一堆棧容量;第一堆棧容量大于或等于第一任務(wù)對于所述第一任務(wù)堆棧的第一實(shí)際使用量。
[0071]本申請實(shí)施例中,檢測第一任務(wù)堆棧中的標(biāo)識(shí)數(shù)據(jù),根據(jù)檢測結(jié)果來計(jì)算第一任務(wù)對第一任務(wù)堆棧的第一實(shí)際使用量,可以精確的得到第一實(shí)際使用量,根據(jù)第一實(shí)際使用量來設(shè)置第一堆棧容量,可以避免對于有限的RAM資源的過于浪費(fèi),保證任務(wù)能夠在盡量減少資源浪費(fèi)的情況下正常運(yùn)行。
[0072]圖3為本申請?zhí)峁┑挠忠环N堆棧容量的設(shè)置方法的流程示意圖。
[0073]本申請?zhí)峁┑囊环N堆棧容量的設(shè)置方法,包括,
[0074]S301、為第一任務(wù)分配第一任務(wù)堆桟;第一任務(wù)堆桟為執(zhí)行第一任務(wù)時(shí)使用的隨機(jī)存取存儲(chǔ)器RAM空間;
[0075]S302、在執(zhí)行第一任務(wù)的過程中,檢測第一任務(wù)堆棧是否發(fā)生堆棧溢出,并在第一任務(wù)堆棧沒有發(fā)生堆棧溢出時(shí),按照第一檢測順序依次檢測第一任務(wù)堆棧的存儲(chǔ)單元中的標(biāo)識(shí)數(shù)據(jù),直到檢測不到標(biāo)識(shí)數(shù)據(jù)時(shí),輸出從第一任務(wù)堆棧中檢測到的標(biāo)識(shí)數(shù)據(jù)的標(biāo)識(shí)數(shù)量;
[0076]第一檢測順序?yàn)閺牡谝蝗蝿?wù)堆棧的棧頂?shù)刂返降谝蝗蝿?wù)堆棧的起始地址的檢測順序;
[0077]其中,標(biāo)識(shí)數(shù)據(jù)是預(yù)先在第一任務(wù)堆棧的每個(gè)存儲(chǔ)單元中寫入的數(shù)據(jù),標(biāo)識(shí)數(shù)據(jù)用于表征存儲(chǔ)單元未被使用,且在存儲(chǔ)單元被使用后消失。
[0078]本申請實(shí)施例中,檢測第一任務(wù)堆棧中標(biāo)識(shí)數(shù)據(jù)是按照第一檢測順序執(zhí)行的,第一檢測順序?yàn)閺牡谝蝗蝿?wù)堆棧的棧頂?shù)刂返降谝蝗蝿?wù)堆棧的起始地址的順序。
[0079]可以理解的是,直到檢測不到標(biāo)識(shí)數(shù)據(jù)時(shí),是指當(dāng)檢測到第一個(gè)不具有標(biāo)識(shí)數(shù)據(jù)的存儲(chǔ)單元時(shí)。在實(shí)際使用中,在檢測時(shí),可以設(shè)置一個(gè)軟件計(jì)數(shù)器,初始值為零,按照第一檢測順序,每當(dāng)檢測到一個(gè)存儲(chǔ)單元具有標(biāo)識(shí)數(shù)據(jù),則計(jì)數(shù)器加一,直到檢測到第一個(gè)不具有標(biāo)識(shí)數(shù)據(jù)的存儲(chǔ)單元時(shí),檢測終止,輸出從第一任務(wù)堆棧中檢測到的標(biāo)識(shí)數(shù)據(jù)的標(biāo)識(shí)數(shù)量。此時(shí),標(biāo)識(shí)數(shù)量即計(jì)數(shù)器中的數(shù)值可以代表第一任務(wù)未使用的第一任務(wù)堆棧的存儲(chǔ)單元的數(shù)量。
[0080]S303、計(jì)算第一任務(wù)堆棧的存儲(chǔ)單元的總量與標(biāo)識(shí)數(shù)量的差值,并將差值作為第一任務(wù)對于第一任務(wù)堆棧的第一實(shí)際使用量。
[0081]本申請實(shí)施例中,輸出標(biāo)識(shí)數(shù)據(jù)的標(biāo)識(shí)數(shù)量后,計(jì)算第一任務(wù)堆棧的存儲(chǔ)單元的總量與標(biāo)識(shí)數(shù)量的差值,此差值即為第一任務(wù)對于第一任務(wù)堆棧的第一實(shí)際使用量。
[0082]可以理解的是,上述S302中,在檢測第一任務(wù)堆棧的存儲(chǔ)單元中的標(biāo)識(shí)數(shù)據(jù)時(shí),除上述檢測方式外,本申請實(shí)施例還可以按照第二檢測順序依次檢測第一任務(wù)堆棧的存儲(chǔ)單元中的標(biāo)識(shí)數(shù)據(jù),直到檢測到標(biāo)識(shí)數(shù)據(jù)時(shí),輸出從第一任務(wù)堆棧中檢測到的不帶有標(biāo)識(shí)數(shù)據(jù)的存儲(chǔ)單元的單元數(shù)量;第二檢測順序?yàn)閺牡谝蝗蝿?wù)堆棧的起始地址到第一任務(wù)堆棧的棧頂?shù)刂返臋z測順序;此時(shí)在S303中只需要將單元數(shù)量作為第一任務(wù)對于第一任務(wù)堆棧的第一實(shí)際使用量即可。
[0083]S304、以第一任務(wù)對于第一任務(wù)堆棧的第一實(shí)際使用量為基準(zhǔn),設(shè)置第一任務(wù)堆棧的第一堆棧容量;第一堆棧容量大于或等于第一任務(wù)對于第一任務(wù)堆棧的第一實(shí)際使用量。
[0084]本申請實(shí)施例中,檢測存儲(chǔ)單元中標(biāo)識(shí)數(shù)據(jù)的單元數(shù)量,根據(jù)單元數(shù)量來確定第一任務(wù)堆棧的第一實(shí)際使用量,就可以精確的得到第一實(shí)際使用量,根據(jù)第一實(shí)際使用量來設(shè)置第一堆棧容量,可以避免對于有限的RAM資源的過于浪費(fèi),保證任務(wù)能夠在盡量減少資源浪費(fèi)的情況下正常運(yùn)行。
[0085]本申請另一方面公開了一種堆棧容量的設(shè)置系統(tǒng)。
[0086]圖4為本申請?zhí)峁┑囊环N堆棧容量的設(shè)置系統(tǒng)的結(jié)構(gòu)示意圖。
[0087]本申請實(shí)施例公開的一種堆棧容量的設(shè)置系統(tǒng),包括:
[0088]分配模塊1,用于為第一任務(wù)分配第一任務(wù)堆棧;所述第一任務(wù)堆棧為執(zhí)行所述第一任務(wù)時(shí)使用的隨機(jī)存取存儲(chǔ)器RAM空間;
[0089]第一檢測模塊2,用于在執(zhí)行所述第一任務(wù)的過程中,檢測所述第一任務(wù)堆棧是否發(fā)生堆棧溢出,并在所述第一任務(wù)堆棧沒有發(fā)生堆棧溢出時(shí),檢測所述第一任務(wù)對于所述第一任務(wù)堆棧的第一實(shí)際使用量;
[0090]所述第一檢測模塊,包括:
[0091]檢測單元,用于檢測所述第一任務(wù)堆棧中的標(biāo)識(shí)數(shù)據(jù),并輸出檢測結(jié)果,根據(jù)所述檢測結(jié)果計(jì)算所述第一任務(wù)對于所述第一任務(wù)堆棧的第一實(shí)際使用量;
[0092]所述檢測單元,包括:
[0093]第一檢測子單元,用于按照第一檢測順序依次檢測所述第一任務(wù)堆棧的存儲(chǔ)單元中的所述標(biāo)識(shí)數(shù)據(jù),直到檢測不到所述標(biāo)識(shí)數(shù)據(jù)時(shí),輸出從所述第一任務(wù)堆棧中檢測到的所述標(biāo)識(shí)數(shù)據(jù)的標(biāo)識(shí)數(shù)量;所述第一檢測順序?yàn)閺乃龅谝蝗蝿?wù)堆棧的棧頂?shù)刂返剿龅谝蝗蝿?wù)堆找的起始地址的檢測順序;
[0094]第一計(jì)算子單元,用于計(jì)算所述第一任務(wù)堆棧的存儲(chǔ)單元的總量與所述標(biāo)識(shí)數(shù)量的差值,并將所述差值作為所述第一任務(wù)對于所述第一任務(wù)堆棧的第一實(shí)際使用量。
[0095]其中,所述標(biāo)識(shí)數(shù)據(jù)是預(yù)先在所述第一任務(wù)堆棧的每個(gè)存儲(chǔ)單元中寫入的標(biāo)識(shí);所述標(biāo)識(shí)數(shù)據(jù)用于表征所述存儲(chǔ)單元未被使用,且在所述存儲(chǔ)單元被使用后消失。
[0096]第二檢測子單元,用于按照第二檢測順序依次檢測所述第一任務(wù)堆棧的存儲(chǔ)單元中的所述標(biāo)識(shí)數(shù)據(jù),直到檢測到所述標(biāo)識(shí)數(shù)據(jù)時(shí),輸出從所述第一任務(wù)堆棧中檢測到的不帶有所述標(biāo)識(shí)數(shù)據(jù)的存儲(chǔ)單元的單元數(shù)量;所述第二檢測順序?yàn)閺乃龅谝蝗蝿?wù)堆棧的起始地址到所述第一任務(wù)堆棧的棧頂?shù)刂返臋z測順序;
[0097]第二計(jì)算子單元,用于將所述單元數(shù)量作為所述第一任務(wù)對于所述第一任務(wù)堆棧的第一實(shí)際使用量。
[0098]第一設(shè)置模塊3,用于以所述第一任務(wù)對于所述第一任務(wù)堆棧的第一實(shí)際使用量為基準(zhǔn),設(shè)置所述第一任務(wù)堆棧的第一堆棧容量;所述第一堆棧容量大于或等于所述第一任務(wù)對于所述第一任務(wù)堆棧的第一實(shí)際使用量。
[0099]可見,在不發(fā)生堆棧溢出時(shí),本申請方案能夠根據(jù)第一任務(wù)對于第一任務(wù)堆棧的第一實(shí)際使用量,來設(shè)置第一任務(wù)堆棧的第一堆棧容量,使得第一堆棧容量與第一任務(wù)的實(shí)際使用量精確匹配,不會(huì)占用過多的RAM空間,可以避免對于有限的RAM資源的過于浪費(fèi),保證任務(wù)能夠在盡量減少資源浪費(fèi)的情況下正常運(yùn)行。
[0100]第二檢測模塊4,用于在所述第一任務(wù)堆棧發(fā)生堆棧溢出時(shí),增大所述第一任務(wù)堆棧占用的RAM空間,并繼續(xù)檢測所述第一任務(wù)堆棧是否還會(huì)發(fā)生堆棧溢出,如果所