專利名稱:視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu)及實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻監(jiān)控的技術(shù)領(lǐng)域,具體說是一種通過內(nèi)存池完成了無內(nèi)存泄露、 無內(nèi)存碎片、內(nèi)存錯(cuò)誤排查等功能的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu)及實(shí)現(xiàn)方法。
背景技術(shù):
內(nèi)存池(Memory Pool)是一種內(nèi)存分配方式。通常我們習(xí)慣直接使用new、 malloc等API申請分配內(nèi)存,這樣做的缺點(diǎn)在于由于所申請內(nèi)存塊的大小不定,當(dāng)頻繁使用時(shí)會造成大量的內(nèi)存碎片并進(jìn)而降低性能。內(nèi)存池則是在真正使用內(nèi)存之前,先申請分配一定數(shù)量的、大小相等(一般情況下)的內(nèi)存塊留作備用。當(dāng)有新的內(nèi)存需求時(shí),就從內(nèi)存池中分出一部分內(nèi)存塊,若內(nèi)存塊不足則再繼續(xù)申請新的內(nèi)存。這樣做的一個(gè)顯著優(yōu)點(diǎn)是盡量避免了內(nèi)存碎片,使得內(nèi)存分配效率得到提升。但是現(xiàn)有技術(shù)中的內(nèi)存池的結(jié)構(gòu)和實(shí)現(xiàn)方法中,無法解決內(nèi)存泄露的問題,而且也不具備內(nèi)存錯(cuò)誤排查的功能,內(nèi)存分配的效率較低。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種通過內(nèi)存池完成了無內(nèi)存泄露、無內(nèi)存碎片、內(nèi)存錯(cuò)誤排查等功能的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu)及實(shí)現(xiàn)方法。本發(fā)明為解決公知技術(shù)中存在的技術(shù)問題所采取的技術(shù)方案是
本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu),其中包括單寫多讀鎖,在寫入時(shí)不允許其他線程進(jìn)行讀和寫,允許多個(gè)線程同時(shí)訪問,在有線程進(jìn)行讀操作的時(shí)候不允許寫操作;內(nèi)存單元,進(jìn)行內(nèi)存分配和管理的單元;內(nèi)存棧,由單寫多讀鎖和內(nèi)存單元構(gòu)成,封裝管理內(nèi)存單元,提供監(jiān)視內(nèi)存塊數(shù)目、內(nèi)存分配大小、是否釋放內(nèi)存給系統(tǒng)的各種接口 ;內(nèi)存注冊, 提供內(nèi)存申請登記機(jī)制,申請的內(nèi)存提供傳入說明性文字以表明內(nèi)存在何處使用;內(nèi)存池, 對內(nèi)存棧和內(nèi)存注冊進(jìn)行封裝;內(nèi)存隊(duì)列,為動態(tài)大小并且有最大限制,采用隊(duì)列方式,先進(jìn)先出,內(nèi)存池中的內(nèi)容進(jìn)入到內(nèi)存隊(duì)列中;內(nèi)存隊(duì)列單元,組成內(nèi)存隊(duì)列。本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池實(shí)現(xiàn)方法,有以下步驟
1)預(yù)先申請部分固定空間作為可用內(nèi)存,當(dāng)申請內(nèi)存的信號發(fā)送至內(nèi)存單元時(shí),內(nèi)存單元對可用內(nèi)存進(jìn)行分配;
2)內(nèi)存分配以最小單元的大小開始,并根據(jù)需要按照最小單元大小的2的倍數(shù)進(jìn)行遞增分配,直至最大單元;
3)判斷內(nèi)存單元內(nèi)是否還有可用內(nèi)存,如果仍有可用內(nèi)存則發(fā)送申請內(nèi)存的信號,如果超出可用內(nèi)存上限,即可用內(nèi)存不足時(shí),則向系統(tǒng)提出申請,由系統(tǒng)進(jìn)行內(nèi)存調(diào)配后再發(fā)出申請內(nèi)存的信號;
4)內(nèi)存被申請后調(diào)用內(nèi)存池接口釋放暫不釋放給系統(tǒng),內(nèi)存單元放在內(nèi)存池結(jié)構(gòu)中, 成功可用內(nèi)存,直到程序結(jié)束時(shí)調(diào)用函數(shù)一起釋放給系統(tǒng);5)內(nèi)存申請超過最大單元,內(nèi)存單元直接向系統(tǒng)提出申請,并且當(dāng)釋放時(shí)直接釋放給系統(tǒng);
內(nèi)存單元中的內(nèi)存分配和管理采用棧的方式,即遵循先進(jìn)后出的原則。本發(fā)明具有的優(yōu)點(diǎn)和積極效果是
本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu)實(shí)現(xiàn)方法,避免頻繁申請和釋放內(nèi)存帶來的不穩(wěn)定性和內(nèi)存開銷,在應(yīng)用中采用內(nèi)存池的方式防止內(nèi)存泄露,對內(nèi)存空間采用動態(tài)申請內(nèi)存重用機(jī)制,防止在使用中產(chǎn)生內(nèi)存碎片,在內(nèi)存使用中采用內(nèi)存注冊,時(shí)時(shí)掌握不同內(nèi)存塊區(qū)的使用位置,通過自報(bào)警機(jī)制,提供內(nèi)存泄露調(diào)試功能。在內(nèi)存池結(jié)構(gòu)中采用單寫多讀鎖,提高了內(nèi)存使用的效率。
圖1是本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu)的示意圖2是本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu)中管理樹的示意圖; 圖3為本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池實(shí)現(xiàn)方法中內(nèi)存管理的流程圖。
具體實(shí)施例方式以下參照附圖及實(shí)施例對本發(fā)明進(jìn)行詳細(xì)的說明。圖1是本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu)的示意圖;圖2是本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu)中管理樹的示意圖;圖3為本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池實(shí)現(xiàn)方法中內(nèi)存管理的流程圖。本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu),其中包括單寫多讀鎖,在寫入時(shí)不允許其他線程進(jìn)行讀和寫,允許多個(gè)線程同時(shí)訪問,在有線程進(jìn)行讀操作的時(shí)候不允許寫操作,內(nèi)存池會在多線程中使用,因此用此種方式可以有效地提高效率,其中包括內(nèi)存池狀態(tài)檢測、內(nèi)存大小分配時(shí)的遞歸操作都會用到這種鎖;內(nèi)存單元,進(jìn)行內(nèi)存分配和管理的單元;內(nèi)存棧,由單寫多讀鎖和內(nèi)存單元構(gòu)成,封裝管理內(nèi)存單元,提供監(jiān)視內(nèi)存塊數(shù)目、內(nèi)存分配大小、是否釋放內(nèi)存給系統(tǒng)的各種接口 ;內(nèi)存注冊,提供內(nèi)存申請登記機(jī)制,申請的內(nèi)存提供傳入說明性文字以表明內(nèi)存在何處使用,以便可以更快捷的找到內(nèi)存泄露的位置; 內(nèi)存池,對內(nèi)存棧和內(nèi)存注冊進(jìn)行封裝;內(nèi)存隊(duì)列,為動態(tài)大小并且有最大限制,采用隊(duì)列方式,先進(jìn)先出,這樣可以省掉固定大小占用內(nèi)存過大的情況,內(nèi)存池中的內(nèi)容進(jìn)入到內(nèi)存隊(duì)列中;內(nèi)存隊(duì)列單元,組成內(nèi)存隊(duì)列。內(nèi)存池使用的是一個(gè)樹型數(shù)據(jù)結(jié)構(gòu)進(jìn)行管理,每一類的內(nèi)存塊組成一個(gè)鏈表,作為樹的“右枝”,而右枝的鏈頭又是一個(gè)鏈表,作為樹的“左枝”。本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池實(shí)現(xiàn)方法,有以下步驟
1)預(yù)先申請部分固定空間作為可用內(nèi)存,當(dāng)申請內(nèi)存的信號發(fā)送至內(nèi)存單元時(shí),內(nèi)存單元對可用內(nèi)存進(jìn)行分配;
2)內(nèi)存分配以最小單元的大小開始,并根據(jù)需要按照最小單元大小的2的倍數(shù)進(jìn)行遞增分配,直至最大單元;
3)判斷內(nèi)存單元內(nèi)是否還有可用內(nèi)存,如果仍有可用內(nèi)存則發(fā)送申請內(nèi)存的信號,如果超出可用內(nèi)存上限,即可用內(nèi)存不足時(shí),則向系統(tǒng)提出申請,由系統(tǒng)進(jìn)行內(nèi)存調(diào)配后再發(fā)
4出申請內(nèi)存的信號;
4)內(nèi)存被申請后調(diào)用內(nèi)存池接口釋放暫不釋放給系統(tǒng),內(nèi)存單元放在內(nèi)存池結(jié)構(gòu)中, 成功可用內(nèi)存,直到程序結(jié)束時(shí)調(diào)用函數(shù)一起釋放給系統(tǒng);
5)內(nèi)存申請超過最大單元,內(nèi)存單元直接向系統(tǒng)提出申請,并且當(dāng)釋放時(shí)直接釋放給系統(tǒng);
內(nèi)存單元中的內(nèi)存分配和管理采用棧的方式,即遵循先進(jìn)后出的原則。
以上所述,僅是本發(fā)明的較佳實(shí)施例而已,并非對本發(fā)明作任何形式上的限制, 雖然本發(fā)明已以較佳實(shí)施例公開如上,然而,并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)然會利用揭示的技術(shù)內(nèi)容作出些許更動或修飾,成為等同變化的等效實(shí)施例,但凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對以上實(shí)施例所作的任何簡單修改、等同變化與修飾,均屬于本發(fā)明技術(shù)方案的范圍內(nèi)。
權(quán)利要求
1.一種視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu),其特征在于,包括單寫多讀鎖,在寫入時(shí)不允許其他線程進(jìn)行讀和寫,允許多個(gè)線程同時(shí)訪問,在有線程進(jìn)行讀操作的時(shí)候不允許寫操作;內(nèi)存單元,進(jìn)行內(nèi)存分配和管理的單元;內(nèi)存棧,由單寫多讀鎖和內(nèi)存單元構(gòu)成,封裝管理內(nèi)存單元,提供監(jiān)視內(nèi)存塊數(shù)目、內(nèi)存分配大小、是否釋放內(nèi)存給系統(tǒng)的各種接口 ; 內(nèi)存注冊,提供內(nèi)存申請登記機(jī)制,申請的內(nèi)存提供傳入說明性文字以表明內(nèi)存在何處使用;內(nèi)存池,對內(nèi)存棧和內(nèi)存注冊進(jìn)行封裝;內(nèi)存隊(duì)列,為動態(tài)大小并且有最大限制,采用隊(duì)列方式,先進(jìn)先出,內(nèi)存池中的內(nèi)容進(jìn)入到內(nèi)存隊(duì)列中;內(nèi)存隊(duì)列單元,組成內(nèi)存隊(duì)列。
2.一種基于權(quán)利要求1所述內(nèi)存池結(jié)構(gòu)的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池實(shí)現(xiàn)方法,有以下步驟1)預(yù)先申請部分固定空間作為可用內(nèi)存,當(dāng)申請內(nèi)存的信號發(fā)送至內(nèi)存單元時(shí),內(nèi)存單元對可用內(nèi)存進(jìn)行分配;2)內(nèi)存分配以最小單元的大小開始,并根據(jù)需要按照最小單元大小的2的倍數(shù)進(jìn)行遞增分配,直至最大單元;3)判斷內(nèi)存單元內(nèi)是否還有可用內(nèi)存,如果仍有可用內(nèi)存則發(fā)送申請內(nèi)存的信號,如果超出可用內(nèi)存上限,即可用內(nèi)存不足時(shí),則向系統(tǒng)提出申請,由系統(tǒng)進(jìn)行內(nèi)存調(diào)配后再發(fā)出申請內(nèi)存的信號;4)內(nèi)存被申請后調(diào)用內(nèi)存池接口釋放暫不釋放給系統(tǒng),內(nèi)存單元放在內(nèi)存池結(jié)構(gòu)中, 成功可用內(nèi)存,直到程序結(jié)束時(shí)調(diào)用函數(shù)一起釋放給系統(tǒng);5)內(nèi)存申請超過最大單元,內(nèi)存單元直接向系統(tǒng)提出申請,并且當(dāng)釋放時(shí)直接釋放給系統(tǒng)。
3.根據(jù)權(quán)利要求2所述的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池實(shí)現(xiàn)方法,其特征在于內(nèi)存單元中的內(nèi)存分配和管理采用棧的方式,即遵循先進(jìn)后出的原則。
全文摘要
本發(fā)明的視頻監(jiān)控平臺系統(tǒng)的內(nèi)存池結(jié)構(gòu)及實(shí)現(xiàn)方法中,包括單寫多讀鎖、內(nèi)存單元、內(nèi)存棧、內(nèi)存注冊、內(nèi)存池、內(nèi)存隊(duì)列、內(nèi)存隊(duì)列單元,避免頻繁申請和釋放內(nèi)存帶來的不穩(wěn)定性和內(nèi)存開銷,在應(yīng)用中采用內(nèi)存池的方式防止內(nèi)存泄露,對內(nèi)存空間采用動態(tài)申請內(nèi)存重用機(jī)制,防止在使用中產(chǎn)生內(nèi)存碎片,在內(nèi)存使用中采用內(nèi)存注冊,時(shí)時(shí)掌握不同內(nèi)存塊區(qū)的使用位置,通過自報(bào)警機(jī)制,提供內(nèi)存泄露調(diào)試功能。在內(nèi)存池結(jié)構(gòu)中采用單寫多讀鎖,提高了內(nèi)存使用的效率。
文檔編號G06F12/02GK102279804SQ20111023429
公開日2011年12月14日 申請日期2011年8月16日 優(yōu)先權(quán)日2011年8月16日
發(fā)明者于新強(qiáng), 謝曉霞, 黃博 申請人:天津市天祥世聯(lián)網(wǎng)絡(luò)科技有限公司