CN107168890B - 一种内存池的管理方法和装置 - Google Patents
一种内存池的管理方法和装置 Download PDFInfo
- Publication number
- CN107168890B CN107168890B CN201710214330.4A CN201710214330A CN107168890B CN 107168890 B CN107168890 B CN 107168890B CN 201710214330 A CN201710214330 A CN 201710214330A CN 107168890 B CN107168890 B CN 107168890B
- Authority
- CN
- China
- Prior art keywords
- memory
- size
- management table
- unit
- level
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明提供了一种内存池的管理方法包括:按照预定的规格申请第一内存空间;对所述第一内存空间建立多个不同级别的内存管理表,并且第i+1级的内存管理表所对应的内存单元由第i级内存管理表所对应的内存单元分割得到;接收内存申请的请求,根据请求的第二内存空间的大小,在多个不同级别的内存管理表中查找与请求的第二内存空间的大小匹配的内存单元。当监测到内存单元释放时,逐级向上合并内存单元,并更新合并后的内存单元的状态,通过多个不同级别的内存管理表可以有效的适应不同大小的第二内存空间的需要,有效的提高内存的利用效率,有利于提高内存回收的完整性。
Description
技术领域
本发明属于内存领域,尤其涉及一种内存池的管理方法和装置。
背景技术
在网络摄像机等视频采集领域,为了提高网络摄像机的性能和稳定性,需要使用内存池为视频申请内存以及释放视频所占用的内存的操作。而目前的视频的帧一般有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-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种内存池的管理方法,其特征在于,所述方法包括:
按照预定的规格申请第一内存空间;
对所述第一内存空间建立多个不同级别的内存管理表,并且第i+1级的内存管理表所对应的内存单元由第i级内存管理表所对应的内存单元分割得到,具体包括:将第i级内存管理表中的内存单元平均分割为两份或者两份以上,将分割后的内存单元作为第i+1级内存管理表所对应的内存单元,其中第i+1级内存管理表与第i级内存管理表为两个级别相邻的内存管理表;
接收内存申请的请求,根据请求的第二内存空间的大小,在多个不同级别的内存管理表中查找与请求的第二内存空间的大小匹配的内存单元,其中i为自然数,所述内存单元所对应的内存管理表为所需要查找的内存管理表;
所述接收内存申请的请求,根据请求的第二内存空间的大小,在多个不同级别的内存管理表中查找与请求的第二内存空间的大小匹配的内存单元,具体为:接收内存申请的请求,获取所述内存申请的请求所申请的第二内存空间的大小;根据所述第二内存空间的大小,在多个不同级别的内存管理表中查找内存单元,使查找的内存单元的空间大于或等于所述第二内存空间的大小,并且查找的内存单元的下一级的内存单元小于所述第二内存空间的大小。
2.根据权利要求1所述方法,其特征在于,所述内存池包括用于视频缓存的内存池,所述方法还包括:
根据所述视频中的最小P帧或B帧的大小,确定最小的内存单元的大小;
或者,所述第一内存空间的内存池的大小为最大P帧的大小*总帧数;
或者所述第一内存空间的内存池的大小为最大P帧的大小*P帧数+最大B帧的大小*B帧数+最大I帧的大小*I帧数;
或者根据上层应用定义所述第一内存空间的内存池的大小。
3.一种内存释放方法,其特征在于,所述方法还包括:
当监测到第一内存空间的内存单元中存储的数据释放时,获取释放的内存单元所对应的第i+1级内存管理表,其中,第一内存空间对应多个不同级别的内存管理表,并且第i+1级的内存管理表所对应的内存单元由第i级内存管理表所对应的内存单元分割得到,具体包括:将第i级内存管理表中的内存单元平均分割为两份或者两份以上,将分割后的内存单元作为第i+1级内存管理表所对应的内存单元,其中第i+1级内存管理表与第i级内存管理表为两个级别相邻的内存管理表;其中i为自然数;
更新所述第i+1级内存管理表中关于所述释放的内存单元的使用状态,并判断与所述释放的内存单元对应于第i级的同一内存单元的相邻内存单元是否为未使用状态;
如果所述相邻内存单元为未使用状态,则更新所述释放的内存单元所对应的第i级内存管理表中的内存单元的状态;
其中,在释放一个内存单元时,通过对内存单元进行向上逐级合并的方式,更新一个或者多个内存管理表中的内存的状态。
4.根据权利要求3所述方法,其特征在于,内存池包括用于视频缓存的内存池,所述方法还包括:
根据所述视频中的最小P帧或B帧的大小,确定最小的内存单元的大小;
或者,所述第一内存空间的内存池的大小为最大P帧的大小*总帧数;
或者所述第一内存空间的内存池的大小为最大P帧的大小*P帧数+最大B帧的大小*B帧数+最大I帧的大小*I帧数;
或者根据上层应用定义所述第一内存空间的内存池的大小。
5.一种内存池的管理装置,其特征在于,所述装置包括:
第一内存空间申请单元,用于按照预定的规格申请第一内存空间;
内存管理表建立单元,用于对所述第一内存空间建立多个不同级别的内存管理表,并且第i+1级的内存管理表所对应的内存单元由第i级内存管理表所对应的内存单元分割得到,具体包括:分割子单元,用于将第i级内存管理表中的内存单元,平均分割为两份或者两份以上,将分割后的内存单元作为第i+1级内存管理表所对应的内存单元,其中第i+1级内存管理表与第i级内存管理表为两个级别相邻的内存管理表;
内存单元查找单元,用于接收内存申请的请求,根据请求的第二内存空间的大小,在多个不同级别的内存管理表中查找与请求的第二内存空间的大小匹配的内存单元,其中i为自然数,所述内存单元所对应的内存管理表为所需要查找的内存管理表;
所述内存单元查找单元包括:
第二内存空间获取子单元,用于接收内存申请的请求,获取所述内存申请的请求所申请的第二内存空间的大小;
内存单元查找子单元,用于根据所述第二内存空间的大小,在多个不同级别的内存管理表中查找内存单元,使查找的内存单元的空间大于或等于所述第二内存空间的大小,并且查找的内存单元的下一级的内存单元小于所述第二内存空间的大小。
6.根据权利要求5所述装置,其特征在于,所述内存池包括用于视频缓存的内存池,所述装置还包括:
内存空间的大小确定单元,用于根据所述视频中的最小P帧或B帧的大小,确定最小的内存单元的大小;
或者,所述第一内存空间的内存池的大小为最大P帧或I帧的大小*总帧数;
或者所述第一内存空间的内存池的大小为最大P帧的大小*P帧数+最大B帧的大小*B帧数+最大I帧的大小*I帧数;
或者根据上层应用定义所述第一内存空间的内存池的大小。
7.一种内存释放装置,其特征在于,所述装置还包括:
内存管理表获取模块,用于当监测到第一内存空间的内存单元中存储的数据释放时,获取释放的内存单元所对应的第i+1级内存管理表,其中,第一内存空间对应多个不同级别的内存管理表,并且第i+1级的内存管理表所对应的内存单元由第i级内存管理表所对应的内存单元分割得到,具体包括:将第i级内存管理表中的内存单元平均分割为两份或者两份以上,将分割后的内存单元作为第i+1级内存管理表所对应的内存单元,其中第i+1级内存管理表与第i级内存管理表为两个级别相邻的内存管理表;其中i为自然数;
使用状态更新单元,用于更新所述第i+1级内存管理表中关于所述释放的内存单元的使用状态,并判断与所述释放的内存单元对应于第i级的同一内存单元的相邻内存单元是否为未使用状态;
如果所述相邻内存单元为未使用状态,则更新所述释放的内存单元所对应的第i级内存管理表中的内存单元的状态;
其中,在释放一个内存单元时,通过对内存单元进行向上逐级合并的方式,更新一个或者多个内存管理表中的内存的状态。
8.根据权利要求7所述装置,其特征在于,内存池包括用于视频缓存的内存池,所述装置还包括:
内存空间的大小确定模块,用于:
根据所述视频中的最小P帧或B帧的大小,确定最小的内存单元的大小;
或者,所述第一内存空间的内存池的大小为最大P帧的大小*总帧数;
或者所述第一内存空间的内存池的大小为最大P帧的大小*P帧数+最大B帧的大小*B帧数+最大I帧的大小*I帧数;
或者根据上层应用定义所述第一内存空间的内存池的大小。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710214330.4A CN107168890B (zh) | 2017-04-01 | 2017-04-01 | 一种内存池的管理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710214330.4A CN107168890B (zh) | 2017-04-01 | 2017-04-01 | 一种内存池的管理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107168890A CN107168890A (zh) | 2017-09-15 |
CN107168890B true CN107168890B (zh) | 2021-03-19 |
Family
ID=59849602
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710214330.4A Active CN107168890B (zh) | 2017-04-01 | 2017-04-01 | 一种内存池的管理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107168890B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110555890B (zh) * | 2018-05-30 | 2023-10-20 | 珠海全志科技股份有限公司 | 一种内存管理方法及系统 |
CN111464860B (zh) * | 2019-01-18 | 2021-06-08 | 中国科学院声学研究所 | 一种视频数据的缓存分配方法 |
CN113124827A (zh) * | 2019-12-31 | 2021-07-16 | 西安航天华迅科技有限公司 | 一种产品姿态测量系统 |
CN113076266B (zh) * | 2021-06-04 | 2021-10-29 | 深圳华云信息系统有限公司 | 一种内存管理方法、装置、电子设备及存储介质 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722106A (zh) * | 2004-07-13 | 2006-01-18 | 中兴通讯股份有限公司 | 一种嵌入式实时操作系统中内存分配的方法 |
CN101221536A (zh) * | 2008-01-25 | 2008-07-16 | 中兴通讯股份有限公司 | 嵌入式系统的内存管理方法及装置 |
CN101266575A (zh) * | 2007-03-13 | 2008-09-17 | 中兴通讯股份有限公司 | 一种提高内存池利用率的方法 |
CN101382916A (zh) * | 2007-09-06 | 2009-03-11 | 大唐移动通信设备有限公司 | 嵌入式系统内存管理的方法 |
CN101984417A (zh) * | 2010-11-01 | 2011-03-09 | 中兴通讯股份有限公司 | 内存管理方法及装置 |
WO2011118013A1 (ja) * | 2010-03-25 | 2011-09-29 | 富士通株式会社 | マルチコアプロセッサシステム、メモリコントローラ制御方法、およびメモリコントローラ制御プログラム |
CN102662761A (zh) * | 2012-03-27 | 2012-09-12 | 福建星网锐捷网络有限公司 | 一种多核中央处理器系统中内存池的调度方法以及装置 |
CN102760080A (zh) * | 2011-04-26 | 2012-10-31 | 腾讯科技(深圳)有限公司 | 一种内存管理的方法和装置 |
CN103077126A (zh) * | 2012-12-24 | 2013-05-01 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
CN103838859A (zh) * | 2014-03-19 | 2014-06-04 | 厦门雅迅网络股份有限公司 | 一种减少linux下多进程间数据拷贝的方法 |
CN105389210A (zh) * | 2015-10-16 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种存储空间管理方法及装置 |
CN105528304A (zh) * | 2015-12-03 | 2016-04-27 | 盛趣信息技术(上海)有限公司 | 内存池管理方法 |
CN106155917A (zh) * | 2015-04-28 | 2016-11-23 | 北京信威通信技术股份有限公司 | 内存管理方法及装置 |
US9507731B1 (en) * | 2013-10-11 | 2016-11-29 | Rambus Inc. | Virtualized cache memory |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130007370A1 (en) * | 2011-07-01 | 2013-01-03 | Oracle International Corporation | Method and apparatus for minimizing working memory contentions in computing systems |
US10534714B2 (en) * | 2014-12-18 | 2020-01-14 | Hewlett Packard Enterprise Development Lp | Allocating cache memory on a per data object basis |
-
2017
- 2017-04-01 CN CN201710214330.4A patent/CN107168890B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722106A (zh) * | 2004-07-13 | 2006-01-18 | 中兴通讯股份有限公司 | 一种嵌入式实时操作系统中内存分配的方法 |
CN101266575A (zh) * | 2007-03-13 | 2008-09-17 | 中兴通讯股份有限公司 | 一种提高内存池利用率的方法 |
CN101382916A (zh) * | 2007-09-06 | 2009-03-11 | 大唐移动通信设备有限公司 | 嵌入式系统内存管理的方法 |
CN101221536A (zh) * | 2008-01-25 | 2008-07-16 | 中兴通讯股份有限公司 | 嵌入式系统的内存管理方法及装置 |
WO2011118013A1 (ja) * | 2010-03-25 | 2011-09-29 | 富士通株式会社 | マルチコアプロセッサシステム、メモリコントローラ制御方法、およびメモリコントローラ制御プログラム |
CN101984417A (zh) * | 2010-11-01 | 2011-03-09 | 中兴通讯股份有限公司 | 内存管理方法及装置 |
CN102760080A (zh) * | 2011-04-26 | 2012-10-31 | 腾讯科技(深圳)有限公司 | 一种内存管理的方法和装置 |
CN102662761A (zh) * | 2012-03-27 | 2012-09-12 | 福建星网锐捷网络有限公司 | 一种多核中央处理器系统中内存池的调度方法以及装置 |
CN103077126A (zh) * | 2012-12-24 | 2013-05-01 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
US9507731B1 (en) * | 2013-10-11 | 2016-11-29 | Rambus Inc. | Virtualized cache memory |
CN103838859A (zh) * | 2014-03-19 | 2014-06-04 | 厦门雅迅网络股份有限公司 | 一种减少linux下多进程间数据拷贝的方法 |
CN106155917A (zh) * | 2015-04-28 | 2016-11-23 | 北京信威通信技术股份有限公司 | 内存管理方法及装置 |
CN105389210A (zh) * | 2015-10-16 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种存储空间管理方法及装置 |
CN105528304A (zh) * | 2015-12-03 | 2016-04-27 | 盛趣信息技术(上海)有限公司 | 内存池管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107168890A (zh) | 2017-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107168890B (zh) | 一种内存池的管理方法和装置 | |
US11216187B2 (en) | Data writing and reading method and apparatus, and distributed object storage cluster | |
US9058112B2 (en) | Retrieving data in a storage system using thin provisioning | |
CN103116661B (zh) | 一种数据库的数据处理方法 | |
CN107220187B (zh) | 一种缓存管理方法、装置及现场可编程门阵列 | |
US9489409B2 (en) | Rollover strategies in a N-bit dictionary compressed column store | |
CN104462225B (zh) | 一种数据读取的方法、装置及系统 | |
CN111737168B (zh) | 一种缓存系统、缓存处理方法、装置、设备及介质 | |
EP3037988A1 (en) | Configuration method and device for hash database | |
CN108874688B (zh) | 一种报文数据缓存方法及装置 | |
CN103116552A (zh) | 用于在分布式存储系统中分配存储空间的方法和装置 | |
CN105117351A (zh) | 向缓存写入数据的方法及装置 | |
Fukuda et al. | Caching memcached at reconfigurable network interface | |
CN114138193B (zh) | 一种分区命名空间固态硬盘的数据写入方法、装置及设备 | |
CN103778120B (zh) | 全局文件标识生成方法、生成装置及相应的分布式文件系统 | |
CN104765574A (zh) | 数据云端存储方法 | |
CN103399823A (zh) | 业务数据的存储方法、设备和系统 | |
CN101582903A (zh) | 一种流媒体资源存储方法和设备 | |
CN112346647A (zh) | 数据存储方法、装置、设备和介质 | |
CN104967807A (zh) | 一种缓存方法和装置 | |
CN106570060B (zh) | 一种信息流中数据的随机抽取方法及装置 | |
CN105069139B (zh) | 文件访问方法和文件访问装置以及服务器 | |
CN115437579B (zh) | 一种元数据管理方法、装置、计算机设备及可读存储介质 | |
CN115190102B (zh) | 信息广播方法、装置、电子单元、soc及电子设备 | |
CN108234552B (zh) | 一种数据存储方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |