[发明专利]内存管理方法有效
申请号: | 202010753221.1 | 申请日: | 2020-07-30 |
公开(公告)号: | CN112100089B | 公开(公告)日: | 2023-08-01 |
发明(设计)人: | 郝强;潘浩;张放;李晓飞;张德兆;王肖;霍舒豪 | 申请(专利权)人: | 重庆兰德适普信息科技有限公司 |
主分类号: | G06F12/02 | 分类号: | G06F12/02 |
代理公司: | 北京慧诚智道知识产权代理事务所(特殊普通合伙) 11539 | 代理人: | 李楠 |
地址: | 401122 重庆*** | 国省代码: | 重庆;50 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 内存 管理 方法 | ||
本发明提供了一种内存管理方法,包括:根据模块当前的使用个数,确定内存分区的个数;根据模块的历史内存,确定每个模块的内存分区大小;将内存分区的地址与模块对应的线程ID进行绑定;接收内存申请函数;内存申请函数包括第一线程ID;查询第一线程ID是否对应内存分区的地址;当第一线程ID对应内存分区的地址时,确定目标内存分区,并在目标内存分区中申请内存。从而减少内存申请与释放不匹配导致的内存重复释放或者内存泄漏问题,保证了内存的安全使用。
技术领域
本发明涉及内存技术领域,尤其涉及一种内存管理方法。
背景技术
随着无人车技术的快速发展,自动驾驶软件的复杂度也越来越高。自动驾驶软件一般采用C++语言开发,为了适应自动驾驶面临的复杂场景,其软件需要使用多种第三方算法或组件。因此,需要使用内存分配机制,对多种算法分配内存,传统的内存分配机制,一般为动态内存申请与释放机制(new与delete)。
但是,传统的内存分配机制对内存的使用限制较多,错误使用时会造成系统崩溃、数据被修改等严重安全问题。
首先,传统内存分配机制是基于内存块的管理。使用者需要自己负责内存的申请与释放。如果使用者忘记了释放,这块内存就会成为其他人无法申请的死内存,这就是常见的内存泄露问题。
其次,由于内存分配机制依赖的标识符是一个内存地址,使用者无从判断指针指向的内存是否已经被释放了。如果使用者两次释放了同一块内存,会造成内存管理模块的崩溃。
最后,由于内存分配机制依赖的标识符是一个内存地址,而释放内存时该内存地址仍然存在,因此如果在后面继续使用该地址指向的内存块,则会造成内存访问异常。对于内存管理模块来讲,这块内存已经被释放了,它就有可能被分配给其他模块使用。如果此时原来的使用者继续根据该指针进行操作,则会修改其他模块的数据。
因此,传统的内存分配机制难以满足内存模块隔离性与安全性的需要。可以通过下面两种方法来避免内存分配机制发生以上问题。
第一、申请释放记录。记录每一次申请与释放操作,通过匹配记录中的申请与释放关系,发现是否有内存未释放。
第二、避免使用动态内存分配。改造代码,避免使用动态内存申请,所需内存预先分配。
但是,对于第一种方法,只能发现内存泄露问题,不能避免内存两次释放问题。
对于第二种方法,会占用大量内存,复杂系统无法使用,且需要对现有算法代码进行改造,工作量巨大。
发明内容
本发明实施例的目的是提供一种内存管理方法,以解决现有技术中的内存泄漏或者占用大量内存,复杂系统无法使用的问题。
为解决上述问题,第一方面,本发明提供了一种内存管理方法,所述内存管理系统方法:
根据模块当前的使用个数,确定内存分区的个数;
根据所述模块的历史内存,确定每个模块的内存分区大小;
将所述内存分区的地址与模块对应的线程ID进行绑定;
接收内存申请函数;所述内存申请函数包括第一线程ID;
查询所述第一线程ID是否对应内存分区的地址;
当所述第一线程ID对应内存分区的地址时,确定目标内存分区,并在目标内存分区中申请内存。
在一种可能的实现方式中,所述方法还包括:
接收内存释放函数;所述内存释放函数包括第二线程ID;
查询所述第二线程ID是否对应内存分区;
当所述第二线程ID对应内存分区时,不执行内存释放操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于重庆兰德适普信息科技有限公司,未经重庆兰德适普信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010753221.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种锥型绝缘线圈的制作方法
- 下一篇:一种介入式给药引流治疗装置