G06F12/0842
1.一种内存池的管理方法,其特征在于,所述方法包括:
按照预定的规格申请第一内存空间;
对所述第一内存空间建立多个不同级别的内存管理表,并且第i+1级的内存管理表所 对应的内存单元由第i级内存管理表所对应的内存单元分割得到;
接收内存申请的请求,根据请求的第二内存空间的大小,在多个不同级别的内存管理 表中查与请求的第二内存空间的大小匹配的内存单元,其中i为自然数。
2.根据权利要求1所述方法,其特征在于,所述第i+1级的内存管理表所对应的内存单 元由第i级内存管理表所对应的内存单元分割得到的步骤具体为:
将第i级内存管理表中的内存单元,平均分割为两份或者两份以上,将分割后的内存单 元作为第i+1级内存管理表所对应的内存单元,其中第i+1级内存管理表与第i级内存管理 表为两个级别相邻的内存管理表。
3.根据权利要求1所述方法,其特征在于,所述内存池包括用于视频缓存的内存池,所 述方法还包括:
根据所述视频中的最小P帧或B帧的大小,确定最小的内存单元的大小;
或者,所述第一内存空间的内存池的大小为最大P帧的大小*总帧数;
或者所述第一内存空间的内存池的大小为最大P帧的大小*P帧数+最大B帧的大小*B帧 数+最大I帧的大小*I帧数;
或者根据上层应用定义所述第一内存空间的内存池的大小。
4.根据权利要求1所述方法,其特征在于,所述接收内存申请的请求,根据请求的第二 内存空间的大小,在多个不同级别的内存管理表中查与请求的第二内存空间的大小匹配 的内存单元的步骤具体为:
接收内存申请的请求,获取所述内存申请的请求所申请的第二内存空间的大小;
根据所述第二内存空间的大小,在多个不同级别的内存管理表中查内存单元,使查 的内存单元的空间大于或等于所述第二内存空间的大小,并且查的内存单元的下一级 的内存单元小于所述第二内存空间的大小。
5.一种内存释放方法,其特征在于,所述方法还包括:
当监测到第一内存空间的内存单元中存储的数据释放时,获取释放的内存单元所对应 的第i+1级内存管理表,其中,第一内存空间对应多个不同级别的内存管理表,并且第i+1级 的内存管理表所对应的内存单元由第i级内存管理表所对应的内存单元分割得到,其中i为 自然数;
更新所述第i+1级内存管理表中关于所述释放的内存单元的使用状态,并判断与所述 释放的内存单元对应于第i级的同一内存单元的相邻内存单元是否为未使用状态;
如果所述相邻内存单元为未使用状态,则更新所述释放的内存单元所对应的第i级内 存管理表中的内存单元的状态。
6.根据权利要求5所述方法,其特征在于,所述内存池包括用于视频缓存的内存池,所 述方法还包括:
根据所述视频中的最小P帧或B帧的大小,确定最小的内存单元的大小;
或者,所述第一内存空间的内存池的大小为最大P帧的大小*总帧数;
或者所述第一内存空间的内存池的大小为最大P帧的大小*P帧数+最大B帧的大小*B帧 数+最大I帧的大小*I帧数;
或者根据上层应用定义所述第一内存空间的内存池的大小。
7.一种内存池的管理装置,其特征在于,所述装置包括:
第一内存空间申请单元,用于按照预定的规格申请第一内存空间;
内存管理表建立单元,用于对所述第一内存空间建立多个不同级别的内存管理表,并 且第i+1级的内存管理表所对应的内存单元由第i级内存管理表所对应的内存单元分割得 到;
内存单元查单元,用于接收内存申请的请求,根据请求的第二内存空间的大小,在多 个不同级别的内存管理表中查与请求的第二内存空间的大小匹配的内存单元,其中i为 自然数。
8.根据权利要求7所述装置,其特征在于,所述内存管理表建立单元包括:
分割子单元,用于将第i级内存管理表中的内存单元,平均分割为两份或者两份以上, 将分割后的内存单元作为第i+1级内存管理表所对应的内存单元,其中第i+1级内存管理表 与第i级内存管理表为两个级别相邻的内存管理表。
9.根据权利要求7所述装置,其特征在于,所述内存池包括用于视频缓存的内存池,所 述装置还包括:
内存空间的大小确定单元,用于根据所述视频中的最小P帧或B帧的大小,确定最小的 内存单元的大小;
或者,所述第一内存空间的内存池的大小为最大P帧或I帧的大小*总帧数;
或者所述第一内存空间的内存池的大小为最大P帧的大小*P帧数+最大B帧的大小*B帧 数+最大I帧的大小*I帧数;
或者根据上层应用定义所述第一内存空间的内存池的大小。
10.根据权利要求7所述装置,其特征在于,所述内存查单元包括:
第二内存空间获取子单元,用于接收内存申请的请求,获取所述内存申请的请求所申 请的第二内存空间的大小;
内存单元查子单元,用于根据所述第二内存空间的大小,在多个不同级别的内存管 理表中查内存单元,使查的内存单元的空间大于或等于所述第二内存空间的大小,并 且查的内存单元的下一级的内存单元小于所述第二内存空间的大小。
11.一种内存释放装置,其特征在于,所述装置还包括:
内存管理表获取模块,用于当监测到第一内存空间的内存单元中存储的数据释放时, 获取释放的内存单元所对应的第i+1级内存管理表,其中,第一内存空间对应多个不同级别 的内存管理表,并且第i+1级的内存管理表所对应的内存单元由第i级内存管理表所对应的 内存单元分割得到,其中i为自然数;
使用状态更新单元,用于更新所述第i+1级内存管理表中关于所述释放的内存单元的 使用状态,并判断与所述释放的内存单元对应于第i级的同一内存单元的相邻内存单元是 否为未使用状态;
如果所述相邻内存单元为未使用状态,则更新所述释放的内存单元所对应的第i级内 存管理表中的内存单元的状态。
12.根据权利要求11所述装置,其特征在于,所述内存池包括用于视频缓存的内存池, 所述装置还包括:
内存空间的大小确定模块,用于:
根据所述视频中的最小P帧或B帧的大小,确定最小的内存单元的大小;
或者,所述第一内存空间的内存池的大小为最大P帧的大小*总帧数;
或者所述第一内存空间的内存池的大小为最大P帧的大小*P帧数+最大B帧的大小*B帧 数+最大I帧的大小*I帧数;
或者根据上层应用定义所述第一内存空间的内存池的大小。
本发明属于内存领域,尤其涉及一种内存池的管理方法和装置。
在网络摄像机等视频采集领域,为了提高网络摄像机的性能和稳定性,需要使用 内存池为视频申请内存以及释放视频所占用的内存的操作。而目前的视频的帧一般有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)、磁碟或者光盘等各种可以存储程序代码的 介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
本文发布于:2023-04-14 18:47:02,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/2/86381.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |