一种实现内存高速交互的系统及方法

著录项
  • CN201611062843.X
  • 20161128
  • CN106776356A
  • 20170531
  • 新疆熙菱信息技术股份有限公司
  • 刘小瑞;王夷;李永平;徐强;孙赫;冯龙龙;高强强;张凯
  • G06F12/02
  • G06F12/02

  • 新疆维吾尔自治区乌鲁木齐市北京南路358号大成国际大厦10层
  • 新疆(65)
摘要
本发明公开了一种实现内存高速交互的系统及方法,方法包括通过内核将所需大小的内存一次申请到位形成内存池;将所述内存池切片划分为若干组不同大小的内存块;将划分好的内存块的地址存入映射表,并建立内存块已使用和未使用两种映射表;申请内存时,从内存块未使用的映射表里直接拿到比所需内存大且与所需内存大小最接近的一个内存块的地址,同时将所述地址放入到内存块已使用的映射表中,释放内存时,将所述地址重新放入到内存块未使用的映射表里,同时从内存块已使用的映射表中将所述地址删除;待整个程序运行完成,直接释放掉整个内存池。本发明具有使用便捷、内存分配效率高、内存块可复用以及无需多次释放的优点。
权利要求

1.一种实现内存高速交互的方法,其特征在于,包括以下步骤:

1)当程序开始运行时,通过内核将所需大小的内存一次申请到位形成内存池;

2)将所述内存池切片划分为若干组不同大小的内存块;

3)将划分好的内存块的地址存入映射表,并建立内存块已使用和未使用两种映射表;

4)申请内存时,从内存块未使用的映射表里直接拿到比所需内存大且与所需内存大小 最接近的一个内存块的地址,同时将所述地址放入到内存块已使用的映射表中,释放内存 时,将所述地址重新放入到内存块未使用的映射表里,同时从内存块已使用的映射表中将 所述地址删除;

5)待整个程序运行完成,直接释放掉整个内存池。

2.根据权利要求1所述的实现内存高速交互的方法,其特征在于,步骤1)中所需大小的 内存是根据工程的实际应用领域确定的。

3.根据权利要求1所述的实现内存高速交互的方法,其特征在于,步骤3)中,将同一组 内存块的地址存入映射表中的同一个单位区域。

4.一种实现内存高速交互的系统,其特征在于,包括内存池创建模块、内存池管理模 块、匹配分析模块和内存池释放模块;

所述内存池创建模块用于当检测到程序运行时通过内核将所需大小的内存一次申请 到位形成内存池,并将所述内存池切片划分为若干组不同大小的内存块;

所述匹配分析模块用于将所需内存与内存池内存储的内存块进行比较,选取比所需内 存大且与所需内存大小最接近的一个内存块作为被调用的内存块;

所述内存池管理模块用于将划分好的内存块的地址存入映射表,并建立内存块已使用 和未使用两种映射表,申请内存时,从内存块未使用的映射表里直接拿到内存块的地址,同 时将所述地址放入到内存块已使用的映射表中,释放内存时,将所述地址重新放入到内存 块未使用的映射表里,同时从内存块已使用的映射表中将所述地址删除;

所述内存池释放模块用于监测整个程序的运行,当整个程序运行结束时,释放掉整个 内存池。

5.根据权利要求4所述的实现内存高速交互的系统,其特征在于,所述内存池创建模块 申请的所需大小的内存是根据工程的实际应用领域确定的。

7.根据权利要求5所述的实现内存高速交互的系统,其特征在于,所述映射表创建模块 将同一组内存块的地址存入映射表中的同一个单位区域。

6.根据权利要求4所述的实现内存高速交互的系统,其特征在于,所述内存池管理模块 通过其上的映射表创建模块实现将划分好的内存块的地址存入内存块已使用的映射表和 内存块未使用的映射表内。

8.根据权利要求4所述的实现内存高速交互的系统,其特征在于,所述内存池管理模块 通过其上的内存块调用模块实现申请内存时,从内存块未使用的映射表里直接拿到内存块 的地址,同时将所述地址放入到内存块已使用的映射表中,释放内存时,将所述地址重新放 入到内存块未使用的映射表里,同时从内存块已使用的映射表中将所述地址删除。

说明书
技术领域

本发明涉及信息技术领域,具体来说,涉及一种实现内存高速交互的系统及方法。

常用的内存使用方式通过使用new/delete,malloc/free进行内存申请和释放,这 样做的缺点在于,由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并 进而降低性能。

内存高速交互技术采用预先申请的方式,在初始化内存池时将内存按照阶梯进行 分配,每次使用时按需在内存池直接取出内存块即可,无需重复申请;同时,为了提高性能, 每块内存都可以复用,从而提高了性能,避免了内存片的产生。

new/delete,malloc/free是C/C++语言提供的内存使用方法。在C语言中,malloc 函数动态申请的内存空间是在堆里(而一般局部变量存于栈里),并且该段内存不会被初始 化,与全局变量不一样,如果不采用手动free()加以释放,则该段内存一直存在,直到程序 退出才被系统。

new是动态分配内存的运算符,自动计算需要分配的空间,在C++中,它属于重载运 算符,可以对多种数据类型形式进行分配内存空间,比如int型、char型、结构体型和类等的 动态中请的内存分配,分配类的内存空间时,同时调用类的构造函数,对内存空间进行初始 化,即完成类的初始化工作。

delete是撤销动态申请的内存运算符。delete与new通常配对使用,与new的功能 相反,可以对多种数据类型形式的内存进行撤销,包括类,撤销类的内存空间时,它要调用 其析构函数,完成相应的清理工作,收回相应的内存资源。

new/delete,malloc/free的共同的缺点是:由于所申请内存块的大小不定,当频 繁使用时会造成大量的内存碎片并进而降低性能。

本发明的目的在于提出一种实现内存高速交互的系统及方法,具有使用便捷、内 存分配效率高、内存块可复用以及无需多次释放的优点。

为实现上述技术目的,本发明的技术方案是这样实现的:

一种实现内存高速交互的方法,包括以下步骤:

1)当程序开始运行时,通过内核将所需大小的内存一次申请到位形成内存池;

2)将所述内存池切片划分为若干组不同大小的内存块;

3)将划分好的内存块的地址存入映射表,并建立内存块已使用和未使用两种映射 表;

4)申请内存时,从内存块未使用的映射表里直接拿到比所需内存大且与所需内存 大小最接近的一个内存块的地址,同时将所述地址放入到内存块已使用的映射表中,释放 内存时,将所述地址重新放入到内存块未使用的映射表里,同时从内存块已使用的映射表 中将所述地址删除;

5)待整个程序运行完成,直接释放掉整个内存池。

进一步的,步骤1)中所需大小的内存是根据工程的实际应用领域确定的。

进一步的,步骤3)中,将同一组内存块的地址存入映射表中的同一个单位区域。

一种实现内存高速交互的系统,包括内存池创建模块、内存池管理模块、匹配分析 模块和内存池释放模块;

所述内存池创建模块用于当检测到程序运行时通过内核将所需大小的内存一次 申请到位形成内存池,并将所述内存池切片划分为若干组不同大小的内存块;

所述匹配分析模块用于将所需内存与内存池内存储的内存块进行比较,选取比所 需内存大且与所需内存大小最接近的一个内存块作为被调用的内存块;

所述内存池管理模块用于将划分好的内存块的地址存入映射表,并建立内存块已 使用和未使用两种映射表,申请内存时,从内存块未使用的映射表里直接拿到内存块的地 址,同时将所述地址放入到内存块已使用的映射表中,释放内存时,将所述地址重新放入到 内存块未使用的映射表里,同时从内存块已使用的映射表中将所述地址删除;

所述内存池释放模块用于监测整个程序的运行,当整个程序运行结束时,释放掉 整个内存池。

进一步的,所述内存池创建模块申请的所需大小的内存是根据工程的实际应用领 域确定的。

进一步的,所述内存池管理模块通过其上的映射表创建模块实现将划分好的内存 块的地址存入内存块已使用的映射表和内存块未使用的映射表内。

进一步的,所述映射表创建模块将同一组内存块的地址存入映射表中的同一个单 位区域。

进一步的,所述内存池管理模块通过其上的内存块调用模块实现申请内存时,从 内存块未使用的映射表里直接拿到内存块的地址,同时将所述地址放入到内存块已使用的 映射表中,释放内存时,将所述地址重新放入到内存块未使用的映射表里,同时从内存块已 使用的映射表中将所述地址删除。

本发明的有益效果:

1、稳定,同时避免内存泄漏:由于内存高速交互技术采用创建内存池的方式申请 内存,减少了因数据耦合产生了内存泄漏;而且内存高速交互技术只需释放一次内存,避免 了频繁对内存操作时,因程序员本身的疏忽,忘记了释放内存而产生的内存泄漏;

2、快速交互:因为在内存片的申请与释放过程中,采用了时空效率转换方案,申请 和释放内存片时不需要寻址,所以不会产生内存碎片,并且大大提高了交互速度;

3、统一管理内存:申请的内存以内存池的方式保存各个内存片,方便程序进行统 一调度和管理;

4、内存可复用:内存池中的内存片,具有可用性属性,此属性可标识内存片的使用 状态是空闲还是忙碌,从而保证了内存片的复用。

图1是根据本发明实施例所述的实现内存高速交互的系统的结构示意图;

图2是根据本发明实施例所述的实现内存高速交互的方法的流程图;

图3是根据本发明实施例所述的内存池划分结构示意图。

下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整 地描述。

如图1所示,根据本发明的实施例所述的一种实现内存高度交互的系统,包括内存 池创建模块、内存池管理模块、匹配分析模块和内存池释放模块。

所述内存池创建模块用于当检测到程序运行时通过内核将所需大小的内存一次 申请到位形成内存池,并将所述内存池切片划分为若干组不同大小的内存块。

具体的,在一个具体的实施例中,所述内存池交互技术是通过以下措施实现的;首 先,使用者根据工程的实际应用领域确定所需要的内存大小以及内存池的切分方式;提供 用于初始化内存块的接口函数,此函数入参是用于配置所需的内存块的大小;在构造函数 中将内存按照入参的值将内存进行分块,将固定大小的内存,按照一定比例预先分配出来, 此过程分配的内存即是所需的全部内存,之后不再申请。

所述匹配分析模块用于将所需内存与内存池内存储的内存块进行比较,选取比所 需内存大且与所需内存大小最接近的一个内存块作为被调用的内存块。

具体的,在内存使用时,例如将内存池划分成有1K、5K、10k、15k……大小的内存 块,当程序需要调用大小为6K的内存时,匹配分析模块就会遍历内存池内的内存块,最终选 择大小为10K的内存块,当需要调用大小为13K的内存时,相应的最终就会选择大小为15K的 内存块。

所述内存池管理模块用于将划分好的内存块的地址存入映射表,并建立内存块已 使用和未使用两种映射表,申请内存时,从内存块未使用的映射表里直接拿到内存块的地 址,同时将所述地址放入到内存块已使用的映射表中,释放内存时,将所述地址重新放入到 内存块未使用的映射表里,同时从内存块已使用的映射表中将所述地址删除。按照上述内 存块的调用和释放方式,可以将内存块排列的不规律性变为规律性。此种方式虽然牺牲掉 部分空间,但是可以提升内存片申请和释放速度。采用本方案,从根本上解决了内存碎片问 题。同时,采用内存地址直接映射的方式,使得内存片释放时不再需要寻址和遍历,提高了 交互速度。

所述内存池释放模块用于监测整个程序的运行,当整个程序运行结束时,释放掉 整个内存池。

具体的,在一个具体的实施例中,上述整个内存池的释放是在析构函数中进行的。

在上述实施例中,所述内存池管理模块通过其上的映射表创建模块实现将划分好 的内存块的地址存入内存块已使用的映射表和内存块未使用的映射表内。

优选的,所述映射表创建模块将同一组内存块的地址存入映射表中的同一个单位 区域。

在上述实施例中,所述内存池管理模块通过其上的内存块调用模块实现申请内存 时,从内存块未使用的映射表里直接拿到内存块的地址,同时将所述地址放入到内存块已 使用的映射表中,释放内存时,将所述地址重新放入到内存块未使用的映射表里,同时从内 存块已使用的映射表中将所述地址删除。

如图2所示,本发明还公开了一种实现内存高速交互的方法,包括以下步骤:

1)当程序开始运行时,通过内核将所需大小的内存一次申请到位形成内存池;

2)将所述内存池切片划分为若干组不同大小的内存块;

3)将划分好的内存块的地址存入映射表,并建立内存块已使用和未使用两种映射 表;

4)申请内存时,从内存块未使用的映射表里直接拿到比所需内存大且与所需内存 大小最接近的一个内存块的地址,同时将所述地址放入到内存块已使用的映射表中,释放 内存时,将所述地址重新放入到内存块未使用的映射表里,同时从内存块已使用的映射表 中将所述地址删除;

5)待整个程序运行完成,直接释放掉整个内存池。

在一个具体的实施例中,采用如下方法实现内存的高速交互:

配置过程:

配置过程处理很简单,如图3所示,为了解决分片的合理性,需要用户手动分配各 个内存片数量,采用字符串的配置方式,可根据工程的实际应用领域进行合理划分。

示例:“1000,2000,1000,500,200,100”

字符串中每个逗号间隔的数字代表该单位内存片的个数。

创建内存池:

通过配置计算出整体内存池的大小,一次申请到位,后续将不再通过内核进行申 请。

分割内存片:

根据配置参数,对内存池进行切片划分,并将划分好的地址存入映射表,同时建立 两种映射关系-内存片已使用和未使用。

内存管理:

内存的管理主要是申请释放内存片操作,在程序工作时需要运行时内存申请和释 放,可以通过我们的内存池进行申请和释放内存片操作,申请时只需从未使用的表里直接 拿到地址,同时将该地址放入已被使用的映射表中即可。释放只需将该地址重新放入未使 用的表里,同时从已使用表里删除即可,简单快速。

申请时,内存池会根据用户需求的内存片大小进行自动匹配,寻合适的单位进 行分配。

释放内存池:

程序运行结束,直接释放掉整个内存池。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

本文发布于:2024-09-23 01:27:52,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/86932.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议