一种内存管理方法及装置制造方法及图纸

技术编号:8489742 阅读:169 留言:0更新日期:2013-03-28 09:11
本申请公开了一种内存管理方法及装置,用以解决现有技术中存在的内存管理效率较低的问题。维护一个由空闲内存结点链接而成的空闲结点链表,使用头指针指向空闲结点链表上首个空闲内存结点,使用尾指针指向空闲结点链表上末个空闲内存结点,使用链指针链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点,在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针信息维护删除该分配的空闲内存结点之后的空闲结点链表;和/或,在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息维护增加该回收的内存结点之后的空闲结点链表。

【技术实现步骤摘要】
一种内存管理方法及装置
本申请涉及计算机
,尤其涉及一种内存管理方法及装置。
技术介绍
内存管理是应用程序运行时对计算机内存分配和使用的技术,其最主要的目的是 高效、快速的分配内存,并且在适当的时候释放和回收内存。在计算机工程实践中,内存管 理是一个不可回避的问题,经常需要频繁的分配和回收内存。在内存管理中引入了内存结 点的概念,内存结点是指特定大小的一个内存块,而内存块是应用程序操作内存的基本单 位。现有技术中,常见的内存管理方案是使用两个链表实现内存分配和回收,一个链 表管理已分配内存结点(UsedNode),称为已分配结点链表;另一个链表管理空闲内存结点 (FreeNode),称为空闲结点链表。在分配内存时,从空闲结点链表上取下一个空闲内存结点 使用,并将该取下的空闲内存结点放置到已分配结点链表上;在回收内存时,将已回收的内 存结点从已分配结点链表上取下,放置到空闲结点链表上。如此将内存结点在空闲结点链 表和已分配结点链表上转换达到内存管理的目的。现有的内存管理方案,存在如下技术问题在管理内存的时候,需要维护和管理两个链表,每分配或者回收一个内存结点,都 需要操作两个链表上的链指针,导致内存管理效率较低,并且两个链表的维护和管理在程 序设计和实现时较为复杂。
技术实现思路
本申请提供一种内存管理方法及装置,用以解决现有技术中存在的内存管理效率 较低的问题。本申请提供的内存管理方法,维护一个由空闲内存结点链接而成的空闲结点链 表,使用头指针指向空闲结点链表上首个空闲内存结点,使用尾指针指向空闲结点链表上 末个空闲内存结点,使用链指针链接空闲结点链表上相邻的空闲内存结点,每一个链指针 指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点,所述方法包括在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针 信息维护删除该分配的空闲内存结点之后的空闲结点链表;和/或,在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息 维护增加该回收的内存结点之后的空闲结点链表。本申请提供的内存管理装置,包括第一指针存储单元,用于存储由空闲内存结点链接而成的空闲结点链表的头指针 和尾指针,所述头指针用于指向空闲结点链表上首个空闲内存结点,所述尾指针用于指向 空闲结点链表上末个空闲内存结点;第二指针存储单元,用于存储链指针,所述链指针用于链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲 内存结点;分配单元,用于在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并 更改相关指针信息维护删除该分配的空闲内存结点之后的空闲结点链表;和/或,回收单 元,用于在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息维 护增加该回收的内存结点之后的空闲结点链表。本申请提供的内存管理方法及装置,使用定义的三种指针能够将若干空闲内存结 点链接成空闲结点链表,通过更改相关指针信息便可以从空闲结点链表上获取空闲内存结 点或者将回收的内存结点挂回到空闲结点链表上,也就是说通过动态的维护一个空闲结点 链表即可实现内存管理,每分配或者回收一个内存结点通过操作空闲结点链表的相关指针 即可,有效提升了内存管理效率,且程序设计简单,易于实现。本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变 得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明 书、权利要求书、以及附图中所特别指出的结构来实现和获得。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申 请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中图1为本申请实施例中内存管理方法流程图2为本申请实施例中初始状态下整个内存状态示意图3为本申请实施例中当申请几个内存结点使用后,整个内存状态示意图4为本申请实施例中当回收一个内存结点后,段整个内存状态示意图5为本申请实施例中持续分配内存直到整个内存空间即将使用结束,并且又回 收了一个内存结点,整个内存状态示意图6为本申请实施例中整个内存空间都使用过一次之后,整个内存状态示意图7为本申请实施例中在图6基础上又回收了一个内存结点,然后又分配了一个 空闲内存结点之后,整个内存状态不意图8为本申请实施例中内存管理装置框图。具体实施方式以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的 优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申 请中的实施例及实施例中的特征可以相互组合。本申请实施例提供了 一种高效的内存管理方法,通过动态地维护一个由空闲内存 结点链接而成的空闲结点链表实现内存管理。本申请实施例这里定义了三种指针以维护空 闲结点链表,其中使用头指针指向空闲结点链表上首个空闲内存结点,即头指针信息表示空闲结点 链表上首个空闲内存结点的地址偏移;使用尾指针指向空闲结点链表上末个空闲内存结点,即尾指针信息表示空闲结点链表上末个空闲内存结点的地址偏移;使用链指针链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接 的两个相邻的空闲内存结点中位置在后的空闲内存结点,即链指针信息表示其链接的两个 相邻的空闲内存结点中,位置在后的空闲内存结点的地址偏移;可以理解,链指针的数量是 随着空闲结点链表上空闲内存结点的数量而动态变化的,如果空闲结点链表上空闲内存结 点的数量为T,相应的链指针的数量为T-1。通过定义的三种指针能够将若干零散的空闲内存结点链接成一个完整的空闲结 点链表,而内存管理就是通过不断的修改指针信息(包括头指针信息、尾指针信息和链指 针信息)从空闲结点链表上获取空闲内存结点或者将回收的内存结点挂回到空闲结点链 表上实现。基于维护的空闲结点链表,所述内存管理方法,如图1所示,包括S101、在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关 指针信息,维护删除该分配的空闲内存结点之后的空闲结点链表;在分配内存时,具体可以包括如下方式从空闲结点链表上获取当前的首个空闲内存结点进行分配,修改头指针指向当前 的第二个空闲内存结点,删除所述首个空闲内存结点和第二个空闲内存结点之间的链指 针;或者,从空闲结点链表上获取当前的末个空闲内存结点进行分配,删除指向所述末个空 闲内存节点的链指针,并修改尾指针指向当前的倒数第二个空闲内存结点;或者,从空闲结点链表上获取当前的首个和末个之外的一个空闲内存结点进行分配,删 除指向所述首个和末个之外的一个空闲内存节点的链指针。S102、在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针 信息,维护增加该回收的内存结点之后的空闲结点链表;在回收内存时,具体可以包括如下方式将回收的内存结点挂回到空闲结点链表的头部,增加指向当前的首个空闲内存结 点的链指针,使用所述增加的链指针链接所述回收的内存结点和首个空闲内存结点,并修 改头指针指向所述回收的内存结点;或者,将回收的内存结点挂回到空闲结点链表的尾部,增加指向所述回收的内存节点的 链指针,使用所述增加的链指针链接当前的末个空闲内存结点和所述回收的内存结点,并 修改尾指针指向所述回本文档来自技高网...

【技术保护点】
一种内存管理方法,其特征在于,维护一个由空闲内存结点链接而成的空闲结点链表,使用头指针指向空闲结点链表上首个空闲内存结点,使用尾指针指向空闲结点链表上末个空闲内存结点,使用链指针链接空闲结点链表上相邻的空闲内存结点,每一个链指针指向其链接的两个相邻的空闲内存结点中位置在后的空闲内存结点,所述方法包括:在分配内存时,从空闲结点链表上获取空闲内存结点进行分配,并更改相关指针信息维护删除该分配的空闲内存结点之后的空闲结点链表;和/或,在回收内存时,将回收的内存结点挂回到空闲结点链表上,并更改相关指针信息维护增加该回收的内存结点之后的空闲结点链表。

【技术特征摘要】

【专利技术属性】
技术研发人员:吕伟邹磊张振中
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:

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

1