[发明专利]一种实现内存高速交互的系统及方法在审
申请号: | 201611062843.X | 申请日: | 2016-11-28 |
公开(公告)号: | CN106776356A | 公开(公告)日: | 2017-05-31 |
发明(设计)人: | 刘小瑞;王夷;李永平;徐强;孙赫;冯龙龙;高强强;张凯 | 申请(专利权)人: | 新疆熙菱信息技术股份有限公司 |
主分类号: | G06F12/02 | 分类号: | G06F12/02 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 830011 新疆维吾尔自治区*** | 国省代码: | 新疆;65 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 实现 内存 高速 交互 系统 方法 | ||
技术领域
本发明涉及信息技术领域,具体来说,涉及一种实现内存高速交互的系统及方法。
背景技术
常用的内存使用方式通过使用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)中,将同一组内存块的地址存入映射表中的同一个单位区域。
一种实现内存高速交互的系统,包括内存池创建模块、内存池管理模块、匹配分析模块和内存池释放模块;
所述内存池创建模块用于当检测到程序运行时通过内核将所需大小的内存一次申请到位形成内存池,并将所述内存池切片划分为若干组不同大小的内存块;
所述匹配分析模块用于将所需内存与内存池内存储的内存块进行比较,选取比所需内存大且与所需内存大小最接近的一个内存块作为被调用的内存块;
所述内存池管理模块用于将划分好的内存块的地址存入映射表,并建立内存块已使用和未使用两种映射表,申请内存时,从内存块未使用的映射表里直接拿到内存块的地址,同时将所述地址放入到内存块已使用的映射表中,释放内存时,将所述地址重新放入到内存块未使用的映射表里,同时从内存块已使用的映射表中将所述地址删除;
所述内存池释放模块用于监测整个程序的运行,当整个程序运行结束时,释放掉整个内存池。
进一步的,所述内存池创建模块申请的所需大小的内存是根据工程的实际应用领域确定的。
进一步的,所述内存池管理模块通过其上的映射表创建模块实现将划分好的内存块的地址存入内存块已使用的映射表和内存块未使用的映射表内。
进一步的,所述映射表创建模块将同一组内存块的地址存入映射表中的同一个单位区域。
进一步的,所述内存池管理模块通过其上的内存块调用模块实现申请内存时,从内存块未使用的映射表里直接拿到内存块的地址,同时将所述地址放入到内存块已使用的映射表中,释放内存时,将所述地址重新放入到内存块未使用的映射表里,同时从内存块已使用的映射表中将所述地址删除。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于新疆熙菱信息技术股份有限公司,未经新疆熙菱信息技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611062843.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:对存储器的连续页面读取
- 下一篇:一种多路读写多容量选择的FIFO控制器