本发明专利技术公开了一种内存分配和释放的方法、装置及系统,本发明专利技术通过预置的等差系数获取符合等差序列的固定内存分配量,然后根据所述固定内存分配量对各内存堆区分配序列标号,再根据内存分配请求获取其所对应的序列标号,根据所述序列标号获取内存堆区,最后根据所述内存堆区中的固定内存分配量来分配内存块,并从所述内存块中分配内存。本发明专利技术基于固定内存分配量能够实现对内存堆区的动态扩展,当接收到内存分配请求时,能快速申请到合适长度的内存,降低了内存碎片的数量;同时,通过管理区的链表结构能够优先分配内存堆区中已释放的内存,减少了搜索的时间,提高了内存空间的利用率和内存管理的效率。
【技术实现步骤摘要】
本专利技术涉及内存管理
,尤其 涉及一种基于固定内存分配量的内存分配和释放的方法、装置及系统。
技术介绍
在现有的系统测试中,经常发现系统经过长时间运行后,内存占用率越来越高,甚至出现内存分配失败的情况,最终导致程序崩溃。这种情况的发生,一般是由内存碎片导致的。内存碎片是一个非常麻烦的问题。即使在一个系统中事实上仍然有许多空闲内存时,内存碎片还会最终导致出现内存用完的情况,一个不断产生内存碎片的系统,不管产生的内存碎片多么小,只要时间足够长,就会将内存用完。这种情况在许多嵌入式系统中,特别是在高可用性系统中是不可接受的。有些软件环境,如OSE实时操作系统已经备有避免内存碎片的良好工具,但个别程序员做出的选择仍然会对最终结果形成影响。内存碎片描述的是所有不可用的空闲内存,这些资源之所以不能被使用,是因为分配内存的机制使这些内存无法使用。这一问题通常都会发生,原因在于空闲内存以小而不连续的方式出现在不同的位置。如何分配内存决定着内存碎片是否会、何时会成为一个问题,为了解决通用系统内存碎片的问题,现提出一种基于固定内存分配量的内存分配和释放的方法、装置及系统。
技术实现思路
本专利技术所要解决的技术问题在于提供一种基于固定内存分配量的内存分配和释放的方法、装置及系统,以解决现有技术中频繁产生内存碎片以及内存分配和释放过程中扩展性差的技术问题。为达到上述目的,本专利技术是通过以下技术方案来实现的,一种内存分配方法,包括请求分配至少两个预置了固定内存分配量的内存堆区;获取内存分配请求;判断所述内存分配请求所请求分配内存的长度是否超过所述内存堆区中固定内存分配量的最大值;如否,则根据所述长度和预置的等差系数哈希到与所述内存分配请求匹配的内存堆区,从所述匹配的内存堆区分配内存;如是,则从操作系统剩余内存空间分配内存。一种内存释放方法,包括获取内存释放请求;判断所述内存释放请求所需要释放内存的长度是否超过所述内存堆区中预置的固定内存分配量的最大值,如否,则根据所述长度获取序列标号,根据所述序列标号获取回收链表指针,并将所述内存释放请求对应的内存块添加到所述回收链表指针所指向的回收链表的链尾;如是,则从操作系统剩余内存空间释放内存。一种内存分配装置,所述装置包括预置堆区模块、第一请求模块、第一判断模块、堆区分配模块和系统分配模块;所述预置堆区模块,与所述第一请求模块相连,用于请求分配至少两个预置了固定内存分配量的内存堆区;所述第一请求模块,与所述预置堆区模块和第一判断模块相连,用于获取内存分 配请求;所述第一判断模块,与所述第一请求模块、堆区分配模块和系统分配模块相连,用于判断所述内存分配请求所需分配内存的长度是否超过所述内存堆区中固定内存分配量的最大值,如否,则发送堆区分配指令到所述堆区分配模块;如是,则发送系统分配指令到所述系统分配模块;所述堆区分配模块,与所述第一判断模块相连,用于接收所述第一判断模块发送的堆区分配指令,并根据所述长度和预置的等差系数哈希到与所述内存分配请求匹配的内存堆区,从所述匹配的内存堆区分配内存;所述系统分配模块,与所述第一判断模块相连,用于接收所述第一判断模块发送的系统分配指令,并从操作系统剩余内存空间分配内存。一种内存释放装置,所述装置包括第二请求模块、第二判断模块、获取标号模块、更新链表模块和系统释放模块;所述第二请求模块,与所述第二判断模块相连,用于获取内存释放请求;所述第二判断模块,与所述第二请求模块、获取标号模块和系统释放模块相连,用于判断所述内存释放请求所请求释放内存长度是否超过所述内存堆区中预置的固定内存分配量的最大值,如否,则发送获取标号指令到所述获取标号模块,如是,则发送系统释放指令到所述系统释放模块;所述获取标号模块,与所述第二判断模块和更新链表模块相连,用于接收所述第二判断模块发送的获取标号指令,根据所述长度获取序列标号;所述更新链表模块,与所述获取标号模块相连,用于根据所述序列标号获取回收链表指针,并将所述内存释放请求对应的内存块添加到所述回收链表指针所指向的回收链表的链尾;所述系统释放模块,与所述第二判断模块相连,用于接收所述第二判断模块发送的系统释放指令,并根据所述系统释放指令调用内存释放函数从操作系统剩余内存空间释放内存。一种内存分配和释放的系统,所述系统包括内存分配装置和内存释放装置,所述内存分配装置包括预置堆区模块、第一请求模块、第一判断模块、堆区分配模块和系统分配模块;所述内存释放装置包括第二请求模块、第二判断模块、获取标号模块、更新链表模块和系统释放模块;所述预置堆区模块,与所述第一请求模块相连,用于请求分配至少两个预置了固定内存分配量的内存堆区;所述第一请求模块,与所述预置堆区模块和第一判断模块相连,用于获取内存分配请求;所述第一判断模块,与所述第一请求模块、堆区分配模块和系统分配模块相连,用于判断所述内存分配请求所需分配内存的长度是否超过所述内存堆区中固定内存分配量的最大值,如否,则发送堆区分配指令到所述堆区分配模块;如是,则发送系统分配指令到所述系统分配模块;所述堆区分配模块,与所述第一判断模块相连,用于接收所述第一判断模块发送的堆区分配指令,并根据所述长度和预置的等差系数哈希到与所述内存分配请求匹配的内存堆区,从所述匹配的内存堆区分配内存;所述系统分配模块,与所述第一判断模块相连,用于接收所述第一判断模块发送的系统分配指令,并从操作系统剩余内存空间分配内存;所述第二请求模块,与所述第二判断模块相连,用于获取内存释放请求; 所述第二判断模块,与所述第二请求模块、获取标号模块和系统释放模块相连,用于判断所述内存释放请求所需释放内存的长度是否超过所述内存堆区中预置的固定内存分配量的最大值,如否,则发送获取标号指令到所述获取标号模块,如是,则发送系统释放指令到所述系统释放模块;所述获取标号模块,与所述第二判断模块和更新链表模块相连,用于接收所述第二判断模块发送的获取标号指令,根据所述长度获取内存堆区的序列标号;所述更新链表模块,与所述获取标号模块相连,用于根据所述序列标号获取回收链表指针,并将所述内存释放请求对应的内存块添加到所述回收链表指针所指向的回收链表的链尾;所述系统释放模块,与所述第二判断模块相连,用于接收所述第二判断模块发送的系统释放指令,并根据所述系统释放指令调用内存释放函数从操作系统剩余内存空间释放内存。本专利技术通过预置的等差系数获取符合等差序列的固定内存分配量,然后根据所述固定内存分配量对各内存堆区分配序列标号,再根据内存分配请求获取其所对应的序列标号,根据所述序列标号获取内存堆区,最后根据所述内存堆区中的固定内存分配量来分配内存块,并从所述内存块中分配内存。本专利技术基于固定内存分配量能够实现对内存堆区的动态扩展,当接收到内存分配请求时,能快速申请到合适长度的内存,降低了内存碎片的数量;同时,通过管理区的链表结构能够优先分配内存堆区中已释放的内存,减少了搜索的时间,提高了内存空间的利用率和内存管理的效率。附图说明图I为本专利技术具体实施例的内存分配方法的流程图;图2为本专利技术实施例中内存堆区、内存块以及指针间的关系意图;图3为本专利技术具体实施例的内存分配装置的结构示意图;图4为本专利技术具体实施例的内存释放方法的流程图;图5为本专利技术具体实施例的内本文档来自技高网...
【技术保护点】
一种内存分配方法,其特征在于,包括,请求分配至少两个预置了固定内存分配量的内存堆区;获取内存分配请求;判断所述内存分配请求所请求分配内存的长度是否超过所述内存堆区中固定内存分配量的最大值;如否,则根据所述长度和预置的等差系数哈希到与所述内存分配请求匹配的内存堆区,从所述匹配的内存堆区分配内存;如是,则从操作系统剩余内存空间分配内存。
【技术特征摘要】
【专利技术属性】
技术研发人员:熊剑,
申请(专利权)人:深圳市融创天下科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。