本發明屬于內存領域,尤其涉及一種內存池的管理方法和裝置。
背景技術:
在網絡攝像機等視頻采集領域,為了提高網絡攝像機的性能和穩定性,需要使用內存池為視頻申請內存以及釋放視頻所占用的內存的操作。而目前的視頻的幀一般有i幀、p幀和b幀之分,其中i幀的大小在80kb~200kb的范圍,p幀和b幀的大小在10kb~90kb的范圍。不同格式的視頻幀所占用的內存空間也不相同,為了更為合理的利用內存空間,一般會根據視頻幀的大小來分配內存。
其中,根據視頻幀的大小來分配內存時,主要是通過預先申請好各種規格的內存塊,根據視頻幀的大小選擇對應規格的內存塊。雖然能夠根據視頻幀的大小分配對應的內存塊,但是需要預先評估好所需要的內存的規格,當視頻幀的大小變化豐富時,如,網絡攝像機的分辨率可以是720p、2048*1536或者4k*2k,每幀的平均大小和1080p的分辨的幀大小不相同,這樣程序代碼需要預先評估每幀的大小,導致開發和維護成本增加,并且內存池管理的通用性不強。
技術實現要素:
本發明的目的在于提供一種內存池的管理方法,以解決現有技術的內存池管理方法開發和維護成本大,且通用性不強的問題。
第一方面,本發明實施例提供了一種內存池的管理方法,所述方法包括:
按照預定的規格申請第一內存空間;
對所述第一內存空間建立多個不同級別的內存管理表,并且第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到;
接收內存申請的請求,根據請求的第二內存空間的大小,在多個不同級別的內存管理表中查找與請求的第二內存空間的大小匹配的內存單元,其中i為自然數。
結合第一方面,在第一方面的第一種可能實現方式中,所述第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到的步驟具體為:
將第i級內存管理表中的內存單元,平均分割為兩份或者兩份以上,將分割后的內存單元作為第i+1級內存管理表所對應的內存單元,其中第i+1級內存管理表與第i級內存管理表為兩個級別相鄰的內存管理表。
結合第一方面,在第一方面的第二種可能實現方式中,所述內存池包括用于視頻緩存的內存池,所述方法還包括:
根據所述視頻中的最小p幀或b幀的大小,確定最小的內存單元的大小;
或者,所述第一內存空間的內存池的大小為最大p幀或i幀的大小*總幀數;
或者所述第一內存空間的內存池的大小為最大p幀的大小*p幀數+最大b幀的大小*b幀數+最大i幀的大小*i幀數;
或者根據上層應用定義所述第一內存空間的內存池的大小。
結合第一方面,在第一方面的第三種可能實現方式中,所述接收內存申請的請求,根據請求的第二內存空間的大小,在多個不同級別的內存管理表中查找與請求的第二內存空間的大小匹配的內存單元的步驟具體為:
接收內存申請的請求,獲取所述內存申請的請求所申請的第二內存空間的大小;
根據所述第二內存空間的大小,在多個不同級別的內存管理表中查找內存單元,使查找的內存單元的空間大于或等于所述第二內存空間的大小,并且查找的內存單元的下一級的內存單元小于所述第二內存空間的大小。
第二方面,本發明實施例提供了一種內存釋放方法,所述方法還包括:
當監測到第一內存空間的內存單元中存儲的數據釋放時,獲取釋放的內存單元所對應的第i+1級內存管理表,其中,第一內存空間對應多個不同級別的內存管理表,并且第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到;
更新所述第i+1級內存管理表中關于所述釋放的內存單元的使用狀態,并判斷與所述釋放的內存單元對應于第i級的同一內存單元的相鄰內存單元是否為未使用狀態;
如果所述相鄰內存單元為未使用狀態,則更新所述釋放的內存單元所對應的第i級內存管理表中的內存單元的狀態。
結合第一方面,在第一方面的第一種可能實現方式中,所述內存池包括用于視頻緩存的內存池,所述方法還包括:
根據所述視頻中的最小p幀或b幀的大小,確定最小的內存單元的大小;
或者,所述第一內存空間的內存池的大小為最大p幀的大小*總幀數;
或者所述第一內存空間的內存池的大小為最大p幀的大小*p幀數+最大b幀的大小*b幀數+最大i幀的大小*i幀數;
或者根據上層應用定義所述第一內存空間的內存池的大小。
第三方面,本發明實施例提供了一種內存池的管理裝置,所述裝置包括:
第一內存空間申請單元,用于按照預定的規格申請第一內存空間;
內存管理表建立單元,用于對所述第一內存空間建立多個不同級別的內存管理表,并且第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到;
內存單元查找單元,用于接收內存申請的請求,根據請求的第二內存空間的大小,在多個不同級別的內存管理表中查找與請求的第二內存空間的大小匹配的內存單元,其中i為自然數。
結合第三方面,在第三方面的第一種可能實現方式中,所述內存管理表建立單元包括:
分割子單元,用于將第i級內存管理表中的內存單元,平均分割為兩份或者兩份以上,將分割后的內存單元作為第i+1級內存管理表所對應的內存單元,其中第i+1級內存管理表與第i級內存管理表為兩個級別相鄰的內存管理表。
結合第二方面,在第二方面的第二種可能實現方式中,所述內存池包括用于視頻緩存的內存池,所述裝置還包括:
內存空間的大小確定單元,用于根據所述視頻中的最小p幀或b幀的大小,確定最小的內存單元的大小;
或者,所述第一內存空間的內存池的大小為最大p幀或i幀的大小*總幀數;
或者所述第一內存空間的內存池的大小為最大p幀的大小*p幀數+最大b幀的大小*b幀數+最大i幀的大小*i幀數;
或者根據上層應用定義所述第一內存空間的內存池的大小。
結合第三方面,在第三方面的第三種可能實現方式中,所述內存查找單元包括:
第二內存空間獲取子單元,用于接收內存申請的請求,獲取所述內存申請的請求所申請的第二內存空間的大小;
內存單元查找子單元,用于根據所述第二內存空間的大小,在多個不同級別的內存管理表中查找內存單元,使查找的內存單元的空間大于或等于所述第二內存空間的大小,并且查找的內存單元的下一級的內存單元小于所述第二內存空間的大小。
第四方面,本發明實施例提供了一種內存釋放裝置,所述裝置包括:
內存管理表獲取模塊,用于當監測到第一內存空間的內存單元中存儲的數據釋放時,獲取釋放的內存單元所對應的第i+1級內存管理表,其中,第一內存空間對應多個不同級別的內存管理表,并且第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到;
使用狀態更新單元,用于更新所述第i+1級內存管理表中關于所述釋放的內存單元的使用狀態,并判斷與所述釋放的內存單元對應于第i級的同一內存單元的相鄰內存單元是否為未使用狀態;
如果所述相鄰內存單元為未使用狀態,則更新所述釋放的內存單元所對應的第i級內存管理表中的內存單元的狀態。
結合第四方面,在第四方面的第一種可能實現方式中,所述內存池包括用于視頻緩存的內存池,所述裝置還包括:
內存空間的大小確定模塊,用于:
根據所述視頻中的最小p幀或b幀的大小,確定最小的內存單元的大小;
或者,所述第一內存空間的內存池的大小為最大p幀的大小*總幀數;
或者所述第一內存空間的內存池的大小為最大p幀的大小*p幀數+最大b幀的大小*b幀數+最大i幀的大小*i幀數;
或者根據上層應用定義所述第一內存空間的內存池的大小。
本發明通過申請第一內存空間,并且根據第一內存空間建立多個不同級別的內存管理表,并且相鄰級別的兩個內存管理表中,第i+1級的內存管理表中的內存單元,由第i級的內存管理表中的內存單元分割而成,對于內存申請的請求所要求的第二內存空間,可以根據第二內存空間的大小,查找不同級別的內存管理表,得到與所述第二內存空間匹配的內存單元。多個不同級別的內存管理表可以有效的適應不同大小的第二內存空間的需要,有效的提高內存的利用效率。
附圖說明
圖1是本發明第一實施例提供的內存池的管理方法的實現流程圖;
圖2為本發明實施例提供的內存管理表與第一內存空間的關聯示意圖;
圖3為本發明實施例提供的第內存單元分配示意圖;
圖4是本發明實施例提供的在圖3基礎上的內存單元分配示意圖;
圖5是本發明實施例提供的在圖4基礎上的內存單元分配示意圖;
圖6是本發明實施例提供的在圖5基礎上的內存單元分配示意圖;
圖7是本發明第二實施例提供的用于視頻緩存的內存池的管理方法的實現流程圖;
圖8是本發明第三實施例提供的內存池的管理方法的實現流程圖;
圖9是本發明第四實施例提供的內存池的管理裝置的結構示意圖。
具體實施方式
為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。
本發明實施例的目的在于提供一種內存池的管理方法,以解決現有技術中的內存池管理技術中,預先申請各種規格的內存塊,然后根據需要使用的內存空間的大小,選擇對應的內存塊。這種內存池管理方法可以適應對內存空間的大小比較穩定的內存申請需要。但是,對于請求的內存空間變化較大的內存請求,比如視頻幀大小變化豐富時,則會造成事先申請部分內存塊不夠,或者事先申請的部分內存塊過多,導致內存分配的通用性不強的問題。
進一步解決的問題還包括:現有技術中通過申請一個大的內存塊,然后在該內存塊使用“裁剪”的方法,根據請求的內存塊的大小裁剪對應的尺寸進行分配,這種內存分配可以較好的提高內存的分配的通用性問題,但是,在內存釋放時,內存塊的延遲釋放會造成較多的內存碎片。
下面結合附圖,對本發明作進一步的說明。
實施例一:
圖1示出了本發明第一實施例提供的內存池的管理方法的實現流程,詳述如下:
在步驟s101中,按照預定的規格申請第一內存空間。
所述第一內存空間,可以根據需要緩存的內容的大小,設置所述第一內存空間的大小。比如,對于音視頻緩存領域,所述第一內存空間的大小可以根據如下幾種方式中的任意一種確定,包括:
所述第一內存空間的內存池的大小為最大p幀大小*總幀數;
或者所述第一內存空間的內存池的大小為最大p幀的大小*p幀數+最大b幀的大小*b幀數+最大i幀的大小*i幀數;
或者根據上層應用定義所述第一內存空間的內存池的大小。
其中,設置所述第一內存空間的大小為最大p幀大小與總幀數的乘積時,可以適應由不同的幀所組成的視頻數據的緩存要求。
在步驟s102中,對所述第一內存空間建立多個不同級別的內存管理表,并且第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到。
具體的,根據第一內存空間的大小,可以建立多個不同級別的內存管理表與第一內存空間的對應關系。
所述內存管理表,是指對第一內存空間進行劃分管理。不同級別的內存管理表,是指按照不同的劃分方式對第一內存空間進行劃分,從而可以得到多種劃分方式所對應的不同大小的內存單元。對于內存管理表,可以根據其中劃分的內存單元的個數,相應的設置對應個數的數組,用于對內存單元進行管理,比如記錄內存單元中下一個可用內存單元的序號、當前內存單元的前一個內存單元的序號、內存單元的大小、內存單元的使用狀態、指向下一個內存單元的指針等。
在本發明優選的實施例中,所述第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到的步驟具體為:
將第i級內存管理表中的內存單元,平均分割為兩份或者兩份以上,將分割后的內存單元作為第i+1級內存管理表所對應的內存單元,其中第i+1級內存管理表與第i級內存管理表為兩個級別相鄰的內存管理表。
當然,所述分割方式還可以包括平均分割為四份或者更多。或者分割的方式還可以按照一定的比例進行分割,比如按照預設的比例,將第i級內存管理表所對應的內存單元,分割為第i+1級內存管理表所對應的內存單元。在本發明的后續實施例中以平均分割為兩份為例進行說明,如果分割為更多份的情況,可以按照兩份的方式,相應的進行處理。
如圖2所示為本發明實施例提供的第一內存空間為32kb,并建立了與所述第一內存空間所對應的6個內存管理表,對所述內存池的第一內存空間進行分割管理的示意圖。
其中,第一內存空間作為一個內存單元,與第一內存管理表對應,并且在第一內存管理表所對應的內存單元的大小為32kb。在第一內存管理表的下一級內存管理表,為第二內存管理表,對第一內存管理表所對應的內存單元進行分割,在本圖中進行了等分,得到兩個內存單元,大小為16kb。依此類推,可以得到第三內存管理表對應4個大小為8kb的內存單元,第四內存管理表對應8個大小為4kb的內存單元,第五內存管理表包對應16個大小為2kb的內存單元,第六內存管理表包對應32個大小為1kb的內存單元。
對于內存池大小為32kb僅為示意性說明。在實際處理中,比如網絡攝像機實際應用中會更大,如1080p分辨率攝像機視頻錄像使用16m的內存池,使用15個內存管理表。
在步驟s103中,接收內存申請的請求,根據請求的第二內存空間的大小,在多個不同級別的內存管理表中查找與請求的第二內存空間的大小匹配的內存單元,其中i為自然數。
根據內存申請的請求,可以獲取請求的第二內存空間的大小,比如在視頻中的幀圖像的大小即為內存申請所對應的第二內存空間的大小。
其中,所述接收內存申請的請求,根據請求的第二內存空間的大小,在多個不同級別的內存管理表中查找與請求的第二內存空間的大小匹配的內存單元的步驟具體為:
接收內存申請的請求,獲取所述內存申請的請求所申請的第二內存空間的大小;
根據所述第二內存空間的大小,在多個不同級別的內存管理表中查找內存單元,使查找的內存單元的空間大于或等于所述第二內存空間的大小,并且查找的內存單元的下一級的內存單元小于所述第二內存空間的大小。
比如,對于圖2所示的第一內存空間,當接收到的內存申請的第二內存空間的大小為2000b時,在第一至第六內存管理表的內存單元中查找,由于第六內存管理表中的內存單元為1kb,第五內存管理表中的內存單元為2kb,因此,如圖3所示,選擇第五內存管理單元中的內存單元分配給所述內存請求。優選一種查找方式為:從最小容量的內存單元所對應的內存管理表開始,依次查找至較大容量的內存單元,判斷每個級別的內存管理表所對應的內存單元的大小是否符合要求。如果第二內存空間的大小首次小于所述內存單元的大小,則該內存單元所對應的內存管理表即為所需要查找的內存管理表。并且,在查找到所需要的內存管理表后,根據內存管理表的存儲順序,依次分配內存單元,對數據進行存儲。
如圖4所示,在圖3基礎上,進一步接收到3k的內存空間的申請時,可先從內存單元的容量最小的第六內存管理表中查找是否有滿足要求的內存單元,通過逐級查找,在第四內存管理表中查找有滿足要求的內存單元,即大小為4kb的內存單元。并且由于第四內存單元表所對應的第一個內存單元中已預先存儲了圖3所示的2kb的數據,則在第四內存單元表所對應的第2個內存單元中存儲所述3kb的數據。
如圖5所示,在圖4基礎上,在進一步接收到5kb的內存空間的申請時,可先從內存單元容量最小的第六內存管理表中查找是否有滿足要求的內存單元,通過逐級查找,在第三內存管理表中查找有滿足要求的內存單元,即大小為8kb的內存單元。由于圖4已經預先存儲了第四內存管理表所對應的第一個存儲單元,因此,5kb的數據存儲在第三內存管理表所對應的第二個存儲單元。
如圖6所示,在圖5的基礎上,進一步接收到6kb的內存空間的申請時,可先從最低的第一級內存管理表中查找是否有滿足要求的內存單元,通過逐級查找,在第三內存管理表中查找有滿足要求的內存單元,即大小為8kb的內存單元。由于圖5已經預先存儲了第三內存管理表所對應的第二個存儲單元,因此,5kb的數據存儲在第三內存管理表所對應的第三個存儲單元。
由于本發明可以根據多個內存管理表,對不同大小的內存請求做出適應性的分配,因而可以對于不同大小的內存請求得到更為合理的內存劃分,有利于提高內存分配的適應性,提高內存的利用效率。
實施例二:
圖7示出了本發明第二實施例提供的用于視頻緩存的內存池的管理方法的實現流程,詳述如下:
在步驟s701中,根據所述視頻中的最小p幀或b幀的大小,確定最小的內存單元的大小,根據所述視頻中的最大i幀或p幀的大小以及緩存的總幀數,確定最大的內存單元的大小。
在視頻中包括p幀、b幀和i幀,其中i幀的大小在80kb~200kb的范圍,p幀和b幀的大小在10kb~90kb的范圍。為了使得第一內存空間以及最小的內存單元能夠適應所有視頻幀的大小要求,可以設定所述第一內存空間為最大i幀(p幀最大幀或者i幀最大幀)的大小與緩存的總幀數的乘積。所述最小的內存單元可以為視頻中的最小的p幀或者b幀的大小,比如可以為10kb。
通過對第一內存空間和最小的內存單元進行設定,可以使得設定后的第一內存空間和內存單元能夠更有效的與內存請求相匹配,進一步提高內存分配的效率。
當然,還可以根據最大p幀或i幀的大小*總幀數,或者根據最大p幀的大小*p幀數+最大b幀的大小*b幀數+最大i幀的大小*i幀數,或者根據上層應用定義,確定所述第一內存空間的內存池的大小。
在步驟s702中,按照預定的規格申請第一內存空間。
在步驟s703中,對所述第一內存空間建立多個不同級別的內存管理表,并且第i+1級的內存管理表中的內存單元由第i級內存管理表中的內存單元分割得到。
在步驟s704中,接收內存申請的請求,根據請求的第二內存空間的大小,在多個不同級別的內存管理表中查找與請求的第二內存空間的大小匹配的內存單元。
步驟s702-s704與實施例一基本相同,在此不作重復贅述。
本發明實施例根據視頻緩存的具體場景,設定與視頻緩存請求對應的第一內存空間、最小內存單元或最大內存單元,從而可以更為準確有效的適應內存分配的要求。
實施例三:
圖8示出了本發明第三實施例提供的內存釋放方法的實現流程,詳述如下:
在步驟s801中,當監測到第一內存空間的內存單元中存儲的數據釋放時,獲取釋放的內存單元所對應的第i+1級內存管理表,其中,第一內存空間對應多個不同級別的內存管理表,并且第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到。
可以對各個內存單元對應的使用狀態標識位進行監測,確定是否存在數據釋放的內存單元。
如果監測到內存單元釋放,則查找所釋放的內存單元對應級別的內存管理表。其中,根據釋放的內存單元查找對應級別的內存管理表的步驟,可以根據預先記錄的該內存單元中記錄的內存管理表的標識查找得到。
比如,在圖3中監測到2kb的內存塊的數據釋放,則查找所釋放的內存單元對應級別的內存管理表為第五內存管理表所對應的內存單元,并更新該內存單元的使用狀態為可以使用。
在步驟s802中,更新所述第i+1級內存管理表中關于所述釋放的內存單元的使用狀態,并判斷與所述釋放的內存單元對應于第i級的同一內存單元的相鄰內存單元是否為未使用狀態。
對第i+1級內存管理表中的內存單元的使用狀態進行更新,并且判斷與所述內存單元相鄰的其它內存單元是否為未使用狀態。如圖3所示,在第五內存管理表所對應的第一個內存單元釋放后,查找到與其相鄰的第2個內存單元為未使用狀態。
由于與第i級中的一個內存單元對應的第i+1級的內存單元,可能為兩個或者兩個以上。因此,需要根據第i級中的內存單元與第i+1級的內存單元的對應關系,查找與釋放的內存單元對應于第i級中的一個內存單元的第i+1級的相鄰內存單元。
所述相鄰內存單元,是與所述釋放的內存單元可能相鄰一個或者兩個內存單元,與第i級和第i+1級之間的內存單元的對應關系相適應。比如,第i級的內存單元與第i+1級的3個內存單元相對應,那么,需要在第i+1級中查找與釋放的內存單元相鄰的2個內存單元,包括左邊相鄰的2個內存單元,或者右邊相鄰的2個內存單元,或者左邊一個和右邊一個相鄰的內存單元。內存從右開始填充的情況下,可以僅檢測左邊相鄰的兩個內存單元是否對應于第i級的內存單元。
如果第i級的內存單元與第i+1級的2個內存單元相對應,那么,需要在第i+1級中查找與釋放的內存單元相鄰的1個內存單元,包括左邊相鄰的1個內存單元或右邊相鄰的1個內存單元。如果內存從右邊開始填充的話,只需檢測釋放的內存單元與其相鄰的左邊的內存單元是否對應于第i級中的同一個內存單元。
在步驟s803中,如果所述相鄰內存單元為未使用狀態,則更新所述釋放的內存單元所對應的第i級內存管理表中的內存單元的狀態。
如圖3所示,在查找到與其相鄰的第2個內存單元為未使用狀態時,將第1個內存單元和第2個內存單元合并,并且將合并后的內存單元作為上一級的內存單元,將第五內存管理表所對應的第1內存單元和第2內存單元合并后,作為第四內存管理表所對應的第1內存單元。并且更新第四內存管理表中的第1內存單元的使用狀態。
當然,還可以由第四級內存管理表逐步向上合并,更新第三、第二和第一內存管理表所對應的內存單元的使用狀態。因此,在釋放一個內存單元時,可以通過本發明中對內存單元進行逐級合并的方法,更新一個或者多個內存管理表中的內存的狀態。
本發明實施例與實施例一和實施例二的內存管理方法對應,具體描述了內存釋放的流程。通過對內存單元的釋放以及內存管理表的更新,對內存單元進行有效的聚合,可以有效的減少內存碎片的產生,提高內存回收的完整性和利用效率。
實施例四:
圖9示出了本發明第四實施例提供的內存池的管理裝置的結構示意圖,詳述如下:
本發明實施例所述內存池的管理裝置,包括:
第一內存空間申請單元901,用于按照預定的規格申請第一內存空間;
內存管理表建立單元902,用于對所述第一內存空間建立多個不同級別的內存管理表,并且第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到;
內存單元查找單元903,用于接收內存申請的請求,根據請求的第二內存空間的大小,在多個不同級別的內存管理表中查找與請求的第二內存空間的大小匹配的內存單元,其中i為自然數。
優選的,所述內存管理表建立單元包括:
分割子單元,用于將第i級內存管理表中的內存單元,平均分割為兩份或者兩份以上,將分割后的內存單元作為第i+1級內存管理表所對應的內存單元,其中第i+1級內存管理表與第i級內存管理表為兩個級別相鄰的內存管理表。
優選的,所述內存池包括用于視頻緩存的內存池,所述裝置還包括:
內存空間的大小確定單元,用于根據所述視頻中的最小p幀或b幀的大小,確定最小的內存單元的大小;
或者,所述第一內存空間的內存池的大小為最大p幀或i幀的大小*總幀數;
或者所述第一內存空間的內存池的大小為最大p幀的大小*p幀數+最大b幀的大小*b幀數+最大i幀的大小*i幀數;
或者根據上層應用定義所述第一內存空間的內存池的大小。
優選的,所述內存查找單元包括:
第二內存空間獲取子單元,用于接收內存申請的請求,獲取所述內存申請的請求所申請的第二內存空間的大小;
內存單元查找子單元,用于根據所述第二內存空間的大小,在多個不同級別的內存管理表中查找內存單元,使查找的內存單元的空間大于或等于所述第二內存空間的大小,并且查找的內存單元的下一級的內存單元小于所述第二內存空間的大小。
本發明實施例所述內存池的管理裝置,與實施例一至二所述內存池的管理方法對應,在此不作重復贅述。
另外,本發明實施例還提供了一種內存釋放裝置,所述裝置包括:
內存管理表獲取模塊,用于當監測到第一內存空間的內存單元中存儲的數據釋放時,獲取釋放的內存單元所對應的第i+1級內存管理表,其中,第一內存空間對應多個不同級別的內存管理表,并且第i+1級的內存管理表所對應的內存單元由第i級內存管理表所對應的內存單元分割得到;
使用狀態更新單元,用于更新所述第i+1級內存管理表中關于所述釋放的內存單元的使用狀態,并判斷與所述釋放的內存單元對應于第i級的同一內存單元的相鄰內存單元是否為未使用狀態;
如果所述相鄰內存單元為未使用狀態,則更新所述釋放的內存單元所對應的第i級內存管理表中的內存單元的狀態。
優選的,所述內存池包括用于視頻緩存的內存池,所述裝置還包括:
內存空間的大小確定模塊,用于:
根據所述視頻中的最小p幀或b幀的大小,確定最小的內存單元的大小;
或者,所述第一內存空間的內存池的大小為最大p幀的大小*總幀數;
或者所述第一內存空間的內存池的大小為最大p幀的大小*p幀數+最大b幀的大小*b幀數+最大i幀的大小*i幀數;
或者根據上層應用定義所述第一內存空間的內存池的大小。
所述內存釋放裝置與實施例三所述內存釋放方法對應,在此不作重復贅述。
在本發明所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現,也可以采用軟件功能單元的形式實現。
所述集成的單元如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述方法的全部或部分。而前述的存儲介質包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護范圍之內。