本发明专利技术提供一种快速定位错误源头的内存管理方法,从内存单元中预分配出部分内存作为静态内存,其余内存均为用于动态分配的内存;将所述静态内存划分为复数个静态管理块;通过内存分配登记步骤、执行内存变更步骤以及内存释放步骤实现,极大地节约了开发过程中的关于动态内存的除错时间,同时大幅提高产品在这方面的稳定性和可靠性。
【技术实现步骤摘要】
本专利技术涉及一种内存管理方法,特别涉及。
技术介绍
在嵌入式产品的软件开发过程中经常出现的动态内存问题包括动态内存泄漏、动态内存错误地址、动态内存多次释放等,严重影响了嵌入式产品的开发进度、可靠性、稳定性。随着嵌入式产品软件功能的日益复杂,同时客户对嵌入式产品的可靠性和稳定性要求越来越高,有必要找到一种相对简易同时快速但又要比较通用的动态内存管理方法,能够快速且准确定位内存错误的源头。现有技术中,一般是通过内存检测工具发现内存问 题,常见的有动态检测工具和静态检测工具。动态检测工具中有代表性的有valgrind,静态检测工具中有代表性的有lint。valgrind是一款Iinux下寻找内存管理的问题的开源工具,虽然具有比较丰富的内存管理能力但仅能适用于x86/amd/ppc的硬件平台和Iinux的软件平台。Iint是对程序进行更加广泛的错误分析,是一种更加严密的编译工具,但无法检测到软件中稍微复杂的动态内存使用问题,而面对更加微妙的内存分配策略,Iint无法胜任。还有一种是特定IDE开发平台提供的针对特定平台的动态内存检测模块,典型的有Vc++提供的debuger和crt堆除错函数,但是这些函数无法跨越软件平台。
技术实现思路
本专利技术要解决的技术问题,在于提供一种,其可以快速发现内存的使用问题,同时具有无MCU依赖,支持检测有源代码模块的动态内存,也支持监测仅提供二进制形式的模块,全面监测软件中动态分配用到的各种应用编程接□。本专利技术要解决的技术问题之一,在于提供一种,其可以运行在绝大多数的mcu硬件架构上,也可以移植到支持c库的任意软件平台上。该方法可以快速发现内存的使用问题,通过查看静态管理块快速定位错误的源头,极大地节约了开发过程中的关于动态内存的除错时间,同时大幅提高产品的稳定性和可靠性。本专利技术通过以下技术方案解决上述技术问题一—种,所述内存管理方法适用于基于C语言的嵌入式软件,首先从内存单元中预分配出部分内存作为静态内存,其余内存均为用于动态分配的内存;其次,将所述静态内存划分为复数个静态管理块;当动态分配新的内存时,执行内存分配登记步骤;当已分配的内存大小发生变化时,执行内存变更步骤;当已分配的内存需要释放时,执行内存释放步骤;所述内存分配登记步骤具体为步骤I、查找未使用的静态管理块,若找到,执行步骤2,若未找到,输出错误信息并等待开发人员快速分析定位错误; 步骤2、动态分配内存,若分配成功,将被分配的内存的首地址和内存大小记录到所述静态管理块,并将该静态管理块标记为已使用;若分配不成功,输出错误信息并等待开发人员快速分析定位错误;若需要多次动态分配内存,重复执行步骤I和步骤2 ;所述内存变更步骤具体为步骤3、根据将要发生变更的内存的首地址从所述静态内存中搜索出该首地址对应的静态管理块;搜索到,执行步骤4,未搜索到,输出错误信息并等待;步骤4、若变更后的内存大小比原来大,则重新动态分配内存,若分配成功,则将重新分配的内存的新首地址以及内存大小更新至所述静态管理块,若分配不成功,输出错误信息并等待开发人员快速分析定位错误;若变更后的内存大小比原来小,则直接把变更后的内存大小直接更新所述静态管理块中;所述内存释放步骤具体为步骤5、根据需要释放的内存的首地址从所述静态内存中搜索出该首地址对应的静态管理块,释放该内存,并将该静态管理块标记为未使用;若未搜索到,输出错误信息并等待开发人员快速分析定位错误。进一步地,所述内存分配登记步骤通过Malloc或Calloc宏调用实现。进一步地,所述内存变更步骤通过Realloc宏调用实现。进一步地,所述内存变更步骤通过Free宏调用实现。本专利技术要解决的技术问题之二,在于提供一种,其可以运行在绝大多数的mcu硬件架构上,也可以移植到支持c++库的任意软件平台上。该方法可以快速发现内存的使用问题,通过查看静态管理块快速定位错误的源头,极大地节约了开发过程中的关于动态内存的除错时间,同时大幅提高产品的稳定性和可靠性。本专利技术通过以下技术方案解决上述技术问题二 一种,所述内存管理方法适用于基于C++语言的嵌入式软件,首先,从内存单元中预分配出部分内存作为静态内存,其余内存均为用于动态分配的内存;其次,将所述静态内存划分为复数个静态管理块;当动态分配新的内存时,执行内存分配登记步骤;当已分配的内存大小发生变化时,也必须重新分配新的内存,执行所述内存分配登记步骤;当已分配的内存需要释放时,执行内存释放步骤;所述内存分配登记步骤具体为步骤10、查找未使用的静态管理块,若找到,执行步骤20,若未找到,输出错误信息并等待开发人员快速分析定位错误;步骤20、动态分配内存,若分配成功,将被分配的内存的首地址和内存大小记录到所述静态管理块,并将该静态管理块标记为已使用;若分配不成功,输出错误信息并等待开发人员快速分析定位错误;若需要多次动态分配内存,重复执行步骤10和步骤20 ;所述内存释放步骤具体为步骤30、根据需要释放的内存的首地址从所述静态内存中搜索出该首地址对应的静态管理块,释放该内存,并将该静态管理块标记为未使用;若未搜索出,贝1J输出错误信息并等待开发人员快速分析定位错误。进一步地,所述内存分配登记步骤是通过重载C++库提供的new函数实现。进一步地,所述内存释放步骤是通过重载C++库提供的delete函数实现。本专利技术具有如下优点本专利技术的内存管理方法可以基于c语言或C++语言开发,可以运行在绝大多数的mcu硬件架构上,也可以移植到基于c语言或c++语言的任意软件平台上。本专利技术通过查看记录有各个动态内存首地址和大小的静态管理块快速定位错误的源头,极大地节约了开发过程中的关于动态内存的除错时间,同时大幅提高产品的稳定性和可靠性。附图说明下面参照附图结合实施例对本专利技术作进一步的说明。图1为本专利技术技术方案一的内存分配登记步骤流程图。图2为本专利技术技术方案一的内存变更步骤流程图。图3为本专利技术技术方案一的内存释放步骤流程图。图4为本专利技术技术方案二的内存分配登记步骤流程图。图5为本专利技术技术方案二的内存释放步骤流程图。具体实施方式技术方案一请参阅图1和图3,一种,所述内存管理方法适用于基于C语言的嵌入式软件,首先从内存单元中预分配出部分内存作为静态内存,其余内存均为用于动态分配的内存;其次,将所述静态内存划分为复数个静态管理块;当动态分配新的内存时,执行内存分配登记步骤,所述内存分配登记步骤通过 Malloc或Calloc宏调用实现;当已分配的内存大小发生变化时,执行内存变更步骤,所述内存变更步骤通过Realloc宏调用实现;当已分配的内存需要释放时,执行内存释放步骤, 所述内存变更步骤通过Free宏调用实现;请参阅图1,所述内存分配登记步骤具体为步骤I、通过Malloc或Calloc宏调用,查找未使用的静态管理块,若找到,执行步骤2,若未找到,输出错误信息并等待开发人员快速分析定位错误;其输出的错误信息是提示用户静态管理块耗尽或动态内存耗尽,同时可以打印出所有静态管理块的内部信息,该类错误可能是动态内存泄露错误;步骤2、动态分配内存,若分配成功,将被分配的内存的首地址和内存大小记录到所述静态管理块,并将该静态管理块标记为已使用;若分配不成功,输出错误信息并等待开发人员快速分析定位本文档来自技高网...
【技术保护点】
快速定位错误源头的内存管理方法,其特征在于:所述内存管理方法适用于基于C语言的嵌入式软件,首先从内存单元中预分配出部分内存作为静态内存,其余内存均为用于动态分配的内存;其次,将所述静态内存划分为复数个静态管理块;当动态分配新的内存时,执行内存分配登记步骤;当已分配的内存大小发生变化时,执行内存变更步骤;当已分配的内存需要释放时,执行内存释放步骤;所述内存分配登记步骤具体为:步骤1、查找未使用的静态管理块,若找到,执行步骤2,若未找到,输出错误信息并等待开发人员快速分析定位错误;步骤2、动态分配内存,若分配成功,将被分配的内存的首地址和内存大小记录到所述静态管理块,并将该静态管理块标记为已使用;若分配不成功,输出错误信息并等待开发人员快速分析定位错误;若需要多次动态分配内存,重复执行步骤1和步骤2;所述内存变更步骤具体为:步骤3、根据将要发生变更的内存的首地址从所述静态内存中搜索出该首地址对应的静态管理块;搜索到,执行步骤4,未搜索到,输出错误信息并等待;步骤4、若变更后的内存大小比原来大,则重新动态分配内存,若分配成功,则将重新分配的内存的新首地址以及内存大小更新至所述静态管理块,若分配不成功,输出错误信息并等待开发人员快速分析定位错误;若变更后的内存大小比原来小,则直接把变更后的内存大小直接更新所述静态管理块中;所述内存释放步骤具体为:步骤5、根据需要释放的内存的首地址从所述静态内存中搜索出该首地址对应的静态管理块,释放该内存,并将该静态管理块标记为未使用;若未 搜索到,输出错误信息并等待开发人员快速分析定位错误。...
【技术特征摘要】
【专利技术属性】
技术研发人员:翁俊峰,张登峰,余杭军,
申请(专利权)人:福建升腾资讯有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。