一种基于松散内存释放的内存管理系统技术方案

技术编号:27417218 阅读:13 留言:0更新日期:2021-02-21 14:34
本发明专利技术公开了一种基于松散内存释放的内存管理系统,包括接口模块,用于统一制定接口标准,以及调用内存分配函数;内存分配模块,用于创建临时内存分配器,并根据任务执行需求从指定的内存分配器中分配内存;线程绑定模块,用于在任务执行前将线程和内存分配器进行绑定,指定内存分配器执行任务;内存释放模块,用于在任务执行完成后释放临时的内存分配器,并还原线程的当前内存分配器;内存分隔模块,用于分隔不同用途的内存区域。本发明专利技术通过设计统一的接口,使各个任务及子任务具有私有内存分配上下文,集中了各个任务的私有内存,对任务内存分配与释放进行松散处理,降低了各个并发任务执行过程中的相互干扰,提高了系统内存的复用效率。复用效率。复用效率。

【技术实现步骤摘要】
一种基于松散内存释放的内存管理系统


[0001]本专利技术涉及计算机内存管理领域,尤其涉及一种基于松散内存释放的内存管理系统。

技术介绍

[0002]目前的内存池管理方法导致分配和释放内存的周期比较大,因此增加了处理器的负荷,限制了每个基带板能够处理的用户。目前普通式链式内存池管理方法,主要采用如下机制:将空闲块按照尺寸的不同,分别挂接到了不同的空闲队列中。对空闲内存块链表的操作需要用互斥锁保护,以解决在多任务环境下,链表的一致性问题。在内存池管理中,引入了对象互斥锁的概念是为了保证内存资源操作的完整性。在任一时刻,只能有一个任务可以访问内存池,而其它任务则不能进行内存池的分配和释放。使用互斥锁本身是一个很耗时的操作,并且会增加任务间的耦合性。这样大大增加了分配和释放内存块耗时,并且耗时的不确定性大大增加,内存复用效率低。在系统长期运行后容易造成系统内存映像散乱的现象,对短暂内存存取错误的容错率低,内存释放不够严格,同时还极易出现内存泄漏现象。

技术实现思路

[0003]本专利技术的目的在于克服现有技术的不足,提供一种基于松散内存释放的内存管理系统。
[0004]本专利技术的目的是通过以下技术方案来实现的:一种基于松散内存释放的内存管理系统,包括接口模块、内存分配模块、线程绑定模块、内存释放模块和内存分隔模块。其中,接口模块用于统一制定接口标准,以及调用内存分配函数;内存分配模块用于创建临时内存分配器,并根据任务执行需求从指定的内存分配器中分配内存;线程绑定模块用于在任务执行前将线程和内存分配器进行绑定,指定内存分配器执行任务;内存释放模块用于在任务执行完成后释放临时的内存分配器,并还原线程的当前内存分配器;内存分隔模块用于分隔不同用途的内存区域,维护系统长期运行。
[0005]具体的,所述接口模块包括分配函数接口、重分配函数接口、释放函数接口、初始化分配器的函数接口、清除分配器函数接口。
[0006]具体的,所述临时内存分配器包括上级内存分配器、BIN内存分配器、堆叠式内存分配器和串接式内存分配器;其中,上级内存分配器用于表示整个内存管理系统的父类型内存,从操作系统处分配较大的内存区,然后将分配的较大内存区交由其它分配器进行内存分配;BIN内存分配器用于分配较小的内存区;堆叠式内存分配器用于根据用户需求的内存大小来自动选择分配的内存区的位置;串接式内存分配器用于将小内存区融合成大内存区。
[0007]具体的,所述内存区域包括字典内存区、会话内存区、锁资源内存区、任务内存区。
[0008]本专利技术的有益效果:
1、本专利技术的系统具有是否引用、是否自拥有内在块、是否对象、拥有内存大小、数据实有尺度等的自描述功能;2、具有动态内存扩展能力,允许任务对内存分配与释放进行松散处理,降低了各个并发任务执行过程中的内存申请与释放操作之间的相互干扰;3、具有内存复用能力,能自适应地动态申请并调整内存用量,大大减少了动态申请内存的开销。
附图说明
[0009]图1是本专利技术的系统功能模块图。
具体实施方式
[0010]为了对本专利技术的技术特征、目的和效果有更加清楚的理解,现对照附图说明本专利技术的具体实施方式。
[0011]本实施例中,如图1所示,一种基于松散内存释放的内存管理系统,包括接口模块、内存分配模块、线程绑定模块、内存释放模块和内存分隔模块。其中,接口模块用于统一制定接口标准,以及调用内存分配函数;内存分配模块用于创建临时内存分配器,并根据任务执行需求从指定的内存分配器中分配内存;线程绑定模块用于在任务执行前将线程和内存分配器进行绑定,指定内存分配器执行任务;内存释放模块用于在任务执行完成后释放临时的内存分配器,并还原线程的当前内存分配器;内存分隔模块用于分隔不同用途的内存区域,维护系统长期运行。
[0012]其中,在内存分配器与线程的绑定时,函数:MemContext *get_mem_context();用于从当前线程结构中取出绑定在当前线程结构上的内存分配器。
[0013]函数:void set_mem_context(MemContext *);用于将一个内存分配器设置到当前的线程结构中,使之与当前线程相绑定。
[0014]绑定内存分配器到线程可以使当前线程在进行局部内存分配时,若不指定从哪个内存分配器分配内存,则从与当前线程相绑定的内在分配器中分配。
[0015]具体的,接口模块包括分配函数接口、重分配函数接口、释放函数接口、初始化分配器的函数接口、清除分配器函数接口。
[0016]具体的,临时内存分配器包括上级内存分配器、BIN内存分配器、堆叠式内存分配器和串接式内存分配器。其中,上级内存分配器,是用来表示整个内存管理系统的父类型内存,该功能是从操作系统处分配较大的内存区,然后由其它分配器进行分配,从父类型内存分配出去的内存称为子类型。所有的子类型内存的释放,都将归还给父类型内存。
[0017]BIN内存分配器,是用来提供分配较小内存区功能的。
[0018]堆叠式内存分配器,是用来根据用户需求的内存大小来自动选择分配的内存区的位置。
[0019]串接式内存分配器,是用来将小内存区融合成大内存区。
[0020]其中,临时内存分配器的部分实现代码如下:/*上级内存分配器*/struct MemContext *parent;
}MemContext;/*BIN内存分配器(使用类型C语句中的堆内存分配算法)*/typedef struct BinMemContext{
ꢀꢀꢀꢀ
void *(*__alloc)(struct MemContext *_this,size_t si);
ꢀꢀꢀꢀ
void *(*__realloc)(struct MemContext *_this,void *p_old,size_t si);
ꢀꢀꢀꢀ
void *(*__free)(struct MemContext *_this,void *p);
ꢀꢀꢀꢀ
void *(*__reset)(struct MemContext *_this);
ꢀꢀꢀꢀ
void *(*__clear)(struct MemContext *_this);
ꢀꢀꢀꢀ
struct MemContext *parent;
ꢀꢀꢀꢀ
mutex
ꢀꢀꢀꢀ
_mutex;
ꢀꢀꢀꢀ
size_t
ꢀꢀꢀꢀ
step;
ꢀꢀꢀꢀ
int
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
max_b_i;
ꢀꢀꢀꢀ
MemHeap
ꢀꢀꢀꢀ
table_stub;
ꢀꢀꢀꢀ
MemHeap large_stub;
ꢀꢀꢀꢀ
Chunk
ꢀꢀꢀ
bins[127];}BinMemContex本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于松散内存释放的内存管理系统,其特征在于,包括接口模块,用于统一制定接口标准,以及调用内存分配函数;内存分配模块,用于创建临时内存分配器,并根据任务执行需求从指定的内存分配器中分配内存;线程绑定模块,用于在任务执行前将线程和内存分配器进行绑定,指定内存分配器执行任务;内存释放模块,用于在任务执行完成后释放临时的内存分配器,并还原线程的当前内存分配器;内存分隔模块,用于分隔不同用途的内存区域,维护系统长期运行。2.根据权利要求1所述的一种基于松散内存释放的内存管理系统,其特征在于,所述接口模块包括分配函数接口、重分配函数接口、释放函数接口、初始化分配器的函数接口、清除分配器函数接口。3.根...

【专利技术属性】
技术研发人员:况忠强王汉瑛吴生勇谢旭东苏德财李尤兵曹茜冯治龙明玉琢李文彬许雄基
申请(专利权)人:成都虚谷伟业科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1