首页 / 专利库 / 专利权 / 申请 / 快速申请内存的方法

快速申请内存的方法

阅读:769发布:2020-05-12

专利汇可以提供快速申请内存的方法专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种快速 申请 内存的方法,该方法包括以下步骤:步骤S102,在系统上电进行初始化时,划分内存池并创建相应的管理结构;步骤S104,根据所划分的内存池创建内存池索引表;以及步骤S106,根据所划分的内存池和内存池索引表来申请内存。通过本发明,实现了快速 定位 应用申请的内存 块 所属的内存池,从而有效避免了因循环搜索内存池而带来的时延。,下面是快速申请内存的方法专利的具体信息内容。

1.一种快速申请内存的方法,其特征在于,所述方法包括以下步 骤:
步骤S102,在系统上电进行初始化时,划分内存池并创 建相应的管理结构;
步骤S104,根据所划分的内存池创建内存池索引表;以 及
步骤S106,根据所划分的内存池和所述内存池索引表来 申请内存。
2.根据权利要求1所述的方法,其特征在于,所述步骤S102还 包括以下处理:
在所述系统上电进行初始化时,将所申请的大内存划分 为多个内存池,以及将每个内存池分为多个内存块;
所述系统为每个内存池创建一个控制域;以及
将每个内存池中的空闲内存块组成一个空闲内存块链表。
3.根据权利要求2所述的方法,其特征在于,每个内存池中的多 个内存块的大小相同,不同内存池中的内存块的大小不同,并 且不同内存池中的内存块的大小满足k×2n,其中,n和k为 自然数。
4.根据权利要求2所述的方法,其特征在于,所述系统为每个内 存块创建一个信息头,所述信息头位于所述内存块的前面,用 于记录所述内存块的信息,其中,所述信息头包括所述内存块 所在内存池的控制域指针以及作为空闲内存块时在所述空闲 内存块链表中的下一个空闲内存块的信息头指针。
5.根据权利要求2所述的方法,其特征在于,所述控制域用于管 理内存池中的内存块,所述控制域包含的信息有:本内存池所 包含的内存块的大小、所在内存池所包含的内存块的个数、所 在内存池所包含的空闲内存块的数量、所在内存池中空闲内存 块链表的头指针、以及所在内存池中空闲内存块链表的尾指 针。
6.根据权利要求5所述的方法,其特征在于,当应用申请内存时, 从所述空闲内存块链表的开头开始分配内存块,并将所述控制 域中的所述空闲内存块链表的头指针修改为下一个空闲内存 块指针;释放内存时将新插入的内存块指针追加到所述空闲内 存块链表的尾部,并将所述控制域中的所述空闲内存块链表的 尾指针修改为所述新插入的内存块指针。
7.根据权利要求1所述的方法,其特征在于,所述内存池索引表 是一维数组,所述数组中的各个数组元素为控制域指针。
8.根据权利要求7所述的方法,其特征在于,在所述数组中,数 组下标index和数组元素element的对应关系为:
element=f((index+1)×2n)
函数f(x)表示申请大小为x的内存块所属的内存池的控制域 指针。
9.根据权利要求1所述的方法,其特征在于,所述步骤S106还 包括以下处理:
根据预定运算得到所要申请的内存池的控制域指针;以及
根据所述控制域指针中记录的信息判断是否存在可分配 的内存块,如果有则返回所述控制域中记录的空闲内存链表的 头指针所指的内存块,并将所述头指针修改为下一个内存块指 针,如果没有则返回失败消息。
10.根据权利要求9所述的方法,其特征在于,所述预定运算为:
将需要申请的内存大小右移n位,将移位后获得的数组作为所 述内存池索引表的数组的下标,然后根据所述下标获得所要申 请的内存池的所述控制域指针。

说明书全文

技术领域

发明涉及计算机操作系统的内存管理领域,尤其涉及对实时 性能要求比较高的嵌入式操作系统的内存管理。

背景技术

在嵌入式操作系统领域,内存资源通常都比较宝贵。然而,由 于应用频繁地申请和释放内存,使得造成了大量的内存碎片,所以 要充分利用内存资源就必须减少内存碎片。
为了减少内存碎片,目前比较普遍的做法是对系统内存进行内 存池划分。该方法首先申请一大内存,并将之划分为若干个区, 然后又将每个区细分为同等大小的若干内存块,每个区内的内存块 大小不同。这里所说的区就是内存池。
在申请内存时,根据应用所申请的内存大小搜索各个内存池, 找到所含内存块大小刚好大于等于所申请内存大小的内存池,从中 分配一块空闲内存块返回给申请者,并置有关的标志位,若无空闲 内存块就返回失败。
在释放内存时,根据应用提供的内存块指针直接找到内存块及 其所属内存池,并置有关标志位。
这种方法通常都存在以下缺点:在应用需要申请内存时,往往 需要根据所申请内存的大小搜索各内存池,从中找到大小合适的内 存块,搜索内存池的过程通常是一个循环,由于循环语句执行效率 比较低,所以这种方法在一定程度上会影响到系统的性能,即使是 用了比较好的搜索算法效率还是不高,并且实现复杂。特别是在对 实时性要求比较高的通信系统中,需要频繁的申请内存块来收发消 息,效率低下的申请方法肯定会影响到话务的吞吐量。
因此,在内存池管理机制中,需要一种能够提高内存申请效率 的方法。

发明内容

本发明提供了一种快速申请内存的方法,该方法包括以下步骤: 步骤S102,在系统上电进行初始化时,划分内存池并创建相应的管 理结构;步骤S104,根据所划分的内存池创建内存池索引表;以及 步骤S106,根据所划分的内存池和内存池索引表来申请内存。
此外,步骤S102还包括以下处理:在系统上电进行初始化时, 将所申请的大块内存划分为多个内存池,以及将每个内存池分为多 个内存块;系统为每个内存池创建一个控制域;以及将每个内存池 中的空闲内存块组成一个空闲内存块链表。
其中,每个内存池中的多个内存块的大小相同,不同内存池中 的内存块的大小不同,并且不同内存池中的内存块的大小满足k× 2n,其中,n和k为自然数。
系统为每个内存块创建一个信息头,信息头位于内存块的前面, 用于记录内存块的信息,其中,信息头包括内存块所在内存池的控 制域指针以及作为空闲内存块时在空闲内存块链表中的下一个空闲 内存块的信息头指针。
控制域用于管理内存池中的内存块,控制域包括关于所在内存 池所包含的内存块的大小、所在内存池所包含的内存块的个数、所 在内存池所包含的空闲内存块的数量、所在内存池中空闲内存块链 表的头指针、以及所在内存池中空闲内存块链表的尾指针的信息。
当应用申请内存时,从空闲内存块链表的开头开始分配内存块, 并将控制域中的空闲内存块链表的头指针修改为下一个空闲内存块 指针;释放内存时将新插入的内存块指针追加到空闲内存块链表尾 部,并将控制域中的空闲内存块链表的尾指针修改为新插入的内存 块指针。
优选地,内存池索引表是一维数组,数组中的各个数组元素为 控制域指针。其中,在该数组中,数组下标index和数组元素element 的对应关系为:element=f((index+1)×2n)。这里,函数f(x) 表示申请大小为x的内存块所属的内存池的控制域指针。
另外,步骤S106还包括以下处理:根据预定运算得到所要申 请的内存池的控制域指针;以及根据控制域指针中记录的信息判断 是否存在可分配的内存块,如果有则返回控制域中记录的空闲内存 链表的头指针所指的内存块,并将头指针修改为下一个内存块指针, 如果没有则返回失败消息。
其中,预定运算为:将需要申请的内存大小右移n位,将移位 后获得的数组作为内存池索引表的数组的下标,然后根据下标获得 所要申请的内存池的控制域指针。
通过本发明的,可以解决内存池管理机制中内存申请效率低的 问题。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部 分地从说明书中变得显而易见,或者通过实施本发明而了解。本发 明的目的和其他优点可通过在所写的说明书、权利要求书、以及附 图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部 分,与本发明的实施例一起用于解释本发明,并不构成对本发明的 限制。在附图中:
图1是示出根据本发明的快速申请内存的方法的流程图
图2是示出根据本发明实施例的内存池结构的示意图;
图3是示出根据本发明实施例的索引表结构的示意图;以及
图4是示出根据本发明实施例的申请内存的流程图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此 处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本 发明。
下面,将结合附图描述本发明。
图1是示出根据本发明的快速申请内存的方法的流程图。
参照图1,该方法包括以下步骤:步骤S102,在系统上电进行 初始化时,划分内存池并创建相应的管理结构;步骤S104,根据所 划分的内存池创建内存池索引表;以及步骤S106,根据所划分的内 存池和内存池索引表来申请内存。
此外,步骤S102还包括以下处理:在系统上电进行初始化时, 将所申请的大块内存划分为多个内存池,以及将每个内存池分为多 个内存块;系统为每个内存池创建一个控制域;以及将每个内存池 中的空闲内存块组成一个空闲内存块链表。
其中,每个内存池中的多个内存块的大小相同,不同内存池中 的内存块的大小不同,并且不同内存池中的内存块的大小满足k× 2n,其中,n和k为自然数。
系统为每个内存块创建一个信息头,信息头位于内存块的前面, 用于记录内存块的信息,其中,信息头包括内存块所在内存池的控 制域指针以及作为空闲内存块时在空闲内存块链表中的下一个空闲 内存块的信息头指针。
控制域用于管理内存池中的内存块,控制域包括关于所在内存 池所包含的内存块的大小、所在内存池所包含的内存块的个数、所 在内存池所包含的空闲内存块的数量、所在内存池中空闲内存块链 表的头指针、以及所在内存池中空闲内存块链表的尾指针的信息。
当应用申请内存时,从空闲内存块链表的开头开始分配内存块, 并将控制域中的空闲内存块链表的头指针修改为下一个空闲内存块 指针;释放内存时将新插入的内存块指针追加到空闲内存块链表尾 部,并将控制域中的空闲内存块链表的尾指针修改为新插入的内存 块指针。。
优选地,内存池索引表是一维数组,数组中的各个数组元素为 控制域指针。其中,在该数组中,数组下标index和数组元素element 的对应关系为:element=f((index+1)×2n)。这里,函数f(x) 表示申请大小为x的内存块所属的内存池的控制域指针。
另外,步骤S106还包括以下处理:根据预定运算得到所要申 请的内存池的控制域指针;以及根据控制域指针中记录的信息判断 是否存在可分配的内存块,如果有则返回控制域中记录的空闲内存 链表的头指针所指的内存块,并将头指针修改为下一个内存块指针, 如果没有则返回失败消息。
其中,预定运算为:将需要申请的内存大小右移n位,将移位 后获得的数组作为内存池索引表的数组的下标,然后根据下标获得 所要申请的内存池的控制域指针。
下面,结合图2至图4详细描述本发明的实施例。
在系统上电进行初始化时,在内存初始化部分申请大块内存, 并将之划分成若干个内存池。每个内存池中又包含若干个同等大小 内存块,不同内存池中所包含的内存块大小(size)不同,但都要符 合一定的要求:
size=k×2n
这里,变量k和n是自然数,变量k用于体现不同内存池中包含的 内存块大小不同。n的取值根据应用需求而定,在通信系统中,通 常选6比较合适(即:不同内存池中内存块的大小都必须是64的倍 数)。
内存池的结构如图2所示,如图所示,在本实施例中划分了8 个内存池,每个内存池中内存块的字节数分别为:64,128,256, 512,1K,2K,4K,8K。由此可见,在本实施例中,n取值为6,k 的取值分别为1,2,4,8,16,32,64,128。
如图2所示,在划分内存块时,系统同时给每个内存块创建一 个信息头(head),其位于内存块的前面,用于记录内存块的信息, 其中包括的内容有:本内存池的PoolMgt指针;以及作为空闲内存 块时在本内存池中空闲内存块链表中的下一个空闲内存块的head 指针。
然后,系统给每个内存池创建一个控制域(PoolMgt),其用于 管理内存池中的内存块,其中包括的信息有:本内存池所含内存块 的大小;本内存池所含内存块的个数;本内存池空闲内存块的数量; 本内存池空闲内存块链表的头指针;以及本内存池空闲内存块链表 的尾指针。
接着,将内存池中的空闲内存块组成一个链表。申请内存时就 从链表头分配内存块,并修改PoolMgt中的链表的头指针为下一空 闲内存块;释放内存时就追加到链表尾,并修改PoolMgt中的链表 的尾指针为新插入的内存块指针。
随后,根据所划分的内存池创建内存池索引表。这里,索引表 是一个一维数组,数组中各元素存放的是PoolMgt指针。数组下标 (Index)和数组元素(element)的对应关系为:
element=f((Index+1)×2n);
其中,函数f(x)表示申请大小为x的内存块所属的内存池的PoolMgt 指针。
在本实施例中,n取值为6,则2n就是64。由于本实施例中最 大的内存块为8K(64×128),则索引表的长度就是128。在图3中 示出了本实施例的索引表。
图4是示出根据本发明实施例的申请内存的流程图。在应用申 请内存块时,先把应用申请的内存大小右移n位,再把移位后获得 的数值作为内存池索引数组的下标,然后获取索引数组相应元素的 数值,该数值就是应用要申请的内存块所属的内存池的PoolMgt指 针。
在本实施例中,n的取值为6,如果应用申请的内存为100个字 节,那么先把100右移6位得到一个temp值为1,再把1作为索引 数组的下标,获得的Ptr指向PoolMgt2,即,第二个内存池的PoolMgt 指针。
根据PoolMgt2中记录的本内存池空闲内存块的数量判断是否 存在可分配的空闲内存块,如果没有则返回失败,否则返回 PoolMgt2中记录的本内存池的空闲内存块链表的头指针所指的内 存块,并更新该头指针为其在空闲链表中的下一个内存块。
由此可见,本发明通过巧妙地划分内存池大小,并结合快捷的 索引技术和移位技巧,实现快速定位应用申请的内存块所属的内存 池,从而有效避免了因循环搜索内存池而带来的时延。本发明简单 高效,在对实时性要求比较高的嵌入式操作系统中有很高的应用价 值。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对 于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本 发明的精神和原则之内,所作的任何修改、等同替换、改进等,均 应包含在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈