一种内存管理方法及系统与流程

文档序号:12802005阅读:214来源:国知局
一种内存管理方法及系统与流程

本发明涉及内存管理领域,特别涉及一种内存管理方法及系统。



背景技术:

在内存管理的过程中,需要实时快速的执行内存的分配和释放。

但是,当内存资源非常有限时。如果没有进行很好的管理进行合适的分配与释放操作,那么频繁的申请内存和释放内存的操作会引起系统的内存或长时间被占用或无法完全的释放从而导致内存碎片等情况,继而导致系统反应变慢,甚至会引起系统崩溃。



技术实现要素:

本发明所要解决的技术问题是:提供一种内存管理方法及系统,避免内存碎片化的情况。

为了解决上述技术问题,本发明采用的技术方案为:

本发明提供一种内存管理方法,包括步骤:

接收内存分配请求;

若所述请求申请的第一内存容量大于预设的内存容量初始值,则不执行所述请求;否则:

若已创建的内存单元中不存在未分配的内存容量大于或等于所述第一内存容量的内存单元,且已创建的内存单元数量小于预设内存单元数量,则:

创建内存容量为所述内存容量初始值的内存单元。

本发明另提供一种内存管理系统,包括:

第一接收模块,用于接收内存分配请求;

第一判断模块,用于判断是否所述请求申请的第一内存容量大于预设的内存容量初始值,则不执行所述请求;

第二判断模块,用于判断若已创建的内存单元中不存在未分配的内存容量大于或等于所述第一内存容量的内存单元,且已创建的内存单元数量小于预设内存单元数量;则创建内存容量为所述内存容量初始值的内存单元。

本发明的有益效果在于:预设内存单元的内存容量初始值,仅接收小于所述初始值的内存分配请求。对接收的所述请求,若已创建的内存单元中有未分配内存,足够分配所述请求申请的内存,则优先分配已创建的内存单元;否则新建内存单元来分配内存。通过所述方式,可以避免内存碎片化的情况,提高内存分配的效率。

附图说明

图1为本发明一种内存管理方法的具体实施方式的流程框图;

图2为本发明一种内存管理系统的具体实施方式的系统框图;

标号说明:

1、第一接收模块;2、第一判断模块;3、第二判断模块;

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。

本发明最关键的构思在于:预设内存单元的内存容量初始值;接收不大于所述初始值的内存分配申请,通过查询已有的内存单元或新建内存单元来分配内存。通过所述方法,避免了内存碎片化的情况,保证了处理器运行的效率。

请参照图1至图2所示:

如图1所示,本发明提供一种内存管理方法:

接收内存分配请求;

若所述请求申请的第一内存容量大于预设的内存容量初始值,则不执行所述请求;否则:

若已创建的内存单元中不存在未分配的内存容量大于或等于所述第一内存容量的内存单元,且已创建的内存单元数量小于预设内存单元数量,则:

创建内存容量为所述内存容量初始值的内存单元。

从上述描述可知,本发明的有益效果在于:通过规定内存单元固定的内存容量,对于每一个接收的内存分配申请,都通过所述的内存单元来分配内存空间。从而避免了频繁的向系统申请内存;同时减少了系统申请内存调用开销,提高效率并且避免了内存碎片化的情形。

进一步的,还包括:

判断当前访问的内存单元的未分配内存容量是否小于所述第一内存容量;

若小于,遍历已创建的内存单元,判断已创建的内存单元中是否存在未分配的内存容量大于或等于所述第一内存容量的内存单元;

若不存在,判断已创建的内存单元数量是否小于预设内存单元数量;

若小于,则:创建内存容量为所述内存容量初始值的内存单元。

由上述描述可知,通过先判断当前访问的内存单元是否符合内存分配申请所需的内存容量的方式,提高了在已创建的内存单元中寻找可以分配足够内存容量的内存单元的效率。

进一步的,还包括:

预设内存单元对应的标识号;

根据所述标识号和内存单元未分配内存容量信息创建内存单元列表。

由上述描述可知,通过设置列表来记录已创建内存单元的标识号和对应的内存单元未分配的内存容量,之后只需通过访问列表就可以寻找符合内存分配申请所需的内存容量的内存单元,提高了在已创建的内存单元中寻找可以分配足够内存容量的内存单元的效率。

进一步的,还包括:

预设内存单元对应的标识号;

获取所分配内存单元的标识号和所分配内存的起始地址;

反馈所分配内存单元的标识号和所分配内存的起始地址给发送所述内存分配请求方。

由上述描述可知,反馈所分配内存单元的标识号和所分配内存的起始地址给发送所述内存分配请求方,可以使发送所述内存分配请求方更快速高效的访问内存地址存储信息。

进一步的,还包括:

预设内存单元对应的标识号;

接收内存释放请求,所述内存释放请求包含需释放内存的内存单元标识号、需释放内存的内存起始地址和需释放的内存容量;

根据所述内存释放请求释放对应的内存。

由上述描述可知,对于释放后的内存单元是可以反复进行利用,就可以提高内存空间的使用效率,避免了一些小内存被闲置而造成内存的碎片化。

如图2所示,本发明提供一种内存管理系统,包括:

第一接收模块1,用于接收内存分配请求;

第一判断模块2,用于判断是否所述请求申请的第一内存容量大于预设的内存容量初始值,则不执行所述请求;

第二判断模块3,用于判断若已创建的内存单元中不存在未分配的内存容量大于或等于所述第一内存容量的内存单元,且已创建的内存单元数量小于预设内存单元数量;则创建内存容量为所述内存容量初始值的内存单元。

进一步的,所述的第二判断模块2,还包括:

第一判断单元,用于判断当前访问的内存单元的未分配内存容量是否小于所述第一内存容量;

第二判断单元,若小于则用于遍历已创建的内存单元,判断已创建的内存单元中是否存在未分配的内存容量大于或等于所述第一内存容量的内存单元;

第三判断单元,若不存在则用于判断是否已创建的内存单元数量小于预设内存单元数量;

创建单元,若小于则用于创建内存容量为所述内存容量初始值的内存单元。

进一步的,还包块:

第一预设模块,用于预设内存单元对应的标识号;

列表模块,用于根据所述标识号和内存单元未分配内存容量信息创建内存单元列表。

进一步的,还包块:

第二预设模块,用于预设内存单元对应的标识号;

获取模块,获取所分配内存单元的标识号和所分配内存的起始地址;

反馈模块,反馈所分配内存单元的标识号和所分配内存的起始地址给发送所述内存分配请求方。

进一步的,还包块:

第三预设模块,用于预设内存单元对应的标识号;

第二接收模块,用于接收内存释放请求,所述内存释放请求包含需释放内存的内存单元标识号、需释放内存的内存起始地址和需释放的内存容量;

释放模块,用于根据所述内存释放请求释放对应的内存。

实施例:

本发明的实施例提供一种内存管理的方法,包括如下步骤:

s1、接收内存分配请求;预设内存单元对应的标识号。

例如,接收内存分配请求,对于内存空间内已经存在的内存单元设置标识号,可以按照生成内存单元的时间顺序来设置。对于内存单元分成头部和数据部,头部则用来记录本内存单元的基本数据,包括:内存单元标识号,内存单元状态,内存单元大小,下一内存块地址,下次内存分配位置以及内存申请的统计信息。

所述的内存单元状态指内存单元能否被使用的情况;所述的内存单元大小指内存单元数据部的内存容量;所述下次内存分配位置指本内存单元的未分配内存的起始地址;所述的内存申请的统计信息指本内存单元被申请使用的次数,若本内存被申请使用了两次,则意味着本内存单元内记录着两个程序的信息,则内存申请的统计信息为2,未被申请适用则为0;

s2、根据所述标识号和内存单元未分配内存容量信息创建内存单元列表;若所述请求申请的第一内存容量大于预设的内存容量初始值,则不执行所述请求。

例如,对于所有的已创建的内存单元,都记录在专门设置的列表内,所述的列表记录了内存单元的标识号以及该内存单元对应的未分配的内存容量,在内存单元被申请或释放的时候,相应要重新记录列表内对应的未分配的内存容量。是对于接收的内存分配申请,先判断,申请分配的内存是否不大于预设的内存容量初始值,若大于,则不执行所述请求;若不大于则执行之后的步骤。

s3、若已创建的内存单元中不存在未分配的内存容量大于或等于所述第一内存容量的内存单元,且已创建的内存单元数量小于预设内存单元数量,则:创建内存容量为所述内存容量初始值的内存单元。s3具体为判断当前访问的内存单元的未分配内存容量是否小于所述第一内存容量;若小于,遍历已创建的内存单元,判断已创建的内存单元中是否存在未分配的内存容量大于或等于所述第一内存容量的内存单元;若不存在,判断已创建的内存单元数量是否小于预设内存单元数量;若小于,则:创建内存容量为所述内存容量初始值的内存单元。

例如,对于接收的内存分配请求,在经过前一步判断,确定所需分配的内存不大于预设的内存容量初始值时;再判断是否为初次申请内存,若是,则直接创建内存容量为所述内存容量初始值的内存单元。若不是初次申请,则通过记录了内存单元标识号对应未分配内存的列表来判断是否存在未分配内存大于或等于内存分配申请所需内存的内存单元;主要先判断当前访问的内存单元,若当前访问的内存单元不满足申请所需的内存容量,则遍历其他内存单元。在已创建的内存单元中若存在未分配内存大于或等于内存分配申请所需内存的内存单元时,分配该内存单元给发送内存分配申请方,把分配的内存单元设置为当前访问的内存单元,并重写该内存单元的头部信息,即改写下次内存分配位置以及内存申请的统计信息加1。若不存在已创建的内存单元中若存在未分配内存大于或等于内存分配申请所需内存的内存单元时,再判断已创建的内存单元数量是否小于预设内存单元数量,若不小于则不执行所述内存分配申请;若小于则创建内存容量为所述内存容量初始值的内存单元,把创建的内存单元设置为当前访问的内存单元,并重写该内存单元的头部信息,即改写下次内存分配位置以及内存申请的统计信息加1,并将创建的内存单元的起始地址记录在上一个内存单元的头部信息中。

s4、获取所分配内存单元的标识号和所分配内存的起始地址;反馈所分配内存单元的标识号和所分配内存的起始地址给发送所述内存分配请求方。

例如,将分配的内存单元的标识号,以及在内存单元中存储位置的起始地址反馈给发送内存分配请求方。

s5、接收内存释放请求,所述内存释放请求包含需释放内存的内存单元标识号、需释放内存的内存起始地址和需释放的内存容量;根据所述内存释放请求释放对应的内存。

例如,发送内存释放请求,所述内存释放请求必须包含需释放内存的内存单元标识号、需释放内存的内存起始地址和需释放的内存容量;接收所述的内存释放请求,并根据所述的内存释放请求释放内存。同时改写所释放内存的内存单元的头部信息,即改写下次内存分配位置以及内存申请的统计信息减1。若内存申请的统计信息为0时,改写内存单元状态标识为未被申请使用。

综上所述,本发明提供一种内存管理方法及系统,避免内存碎片化的情况。通过接受小于预设内存容量初始值的内存分配请求,在已创建的内存单元中寻找合适的内存单元来分配内存给请求方,若没有合适的就创建新的内存容量等于所述预设内存容量的内存单元来分配内存。在寻找已创建的内存单元时先寻找当前访问的内存单元,若不合适再遍历其他内存单元。同时,通过创建列表来记录已创建的内存单元。同时,可以接收内存释放请求,根据所述的内存释放请求来释放对应容量和位置的内存。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1