堆内存块查找方法、装置、设备及存储介质制造方法及图纸

技术编号:24035450 阅读:41 留言:0更新日期:2020-05-07 01:46
本发明专利技术实施例公开了一种堆内存块查找方法、装置、设备及存储介质。方法应用于嵌入式系统,包括:获取目标内存地址,并计算目标内存地址对应的映射数组的下标值;映射数组的各数组元素分别对应一个固定大小的映射内存,各数组元素中分别存储包括与其对应的映射内存的尾地址的堆内存块的首地址;从映射数组中获取与下标值对应的堆内存块首地址;如果目标内存地址属于堆内存块首地址对应的内存地址范围,则确定堆内存块首地址对应的堆内存块为与目标内存地址匹配的目标堆内存块。本发明专利技术实施例的技术方案,实现了对于嵌入式系统中堆内存范围内的任意内存地址,可以通过地址解析计算,快速定位到内存块链表中的堆内存块。

Heap memory block search method, device, device and storage medium

【技术实现步骤摘要】
堆内存块查找方法、装置、设备及存储介质
本专利技术实施例涉及计算机
,尤其涉及一种堆内存块查找方法、装置、设备及存储介质。
技术介绍
现有的嵌入式系统中,一般使用malloc等函数从系统堆中分配堆内存块,并通过malloc函数返回分配的堆内存块的首地址,从而可以查看该堆内存块的属性。但是,在系统报错或者编程人员操作时,由于所获取到的地址并不一定是malloc返回的地址,因此,需要专业人员先通过汇编代码从大量堆内存地址中查找该地址对应的堆内存块,才能查看内存块的属性。现有的堆内存块查找方法是:将系统中的堆内存块设置成固定大小,并为每个堆内存块与管理数组的各下标建立一一对应的映射关系,根据堆内存块的指定地址找到管理数组中对应的下标,根据下标找到要查找的堆内存块。但这种堆内存块查找方法要求堆内存块必须是固定大小,不利于内存的灵活分配,而且必须根据一个指定的内存地址才能找到对应的堆内存块,无法找到与任意内存地址对应的堆内存块。
技术实现思路
本专利技术实施例提供了一种堆内存块查找方法、装置、设备及存储介质,以实现对于嵌入式系统中堆内存范围内的任意内存地址,可以通过地址解析计算,快速定位到内存块链表中的堆内存块。第一方面,本专利技术实施例提供了一种堆内存块查找方法,应用于嵌入式系统,包括:获取目标内存地址,并计算目标内存地址对应的映射数组的下标值;映射数组的各数组元素分别对应一个固定大小的映射内存,各数组元素中分别存储包括与其对应的映射内存的尾地址的堆内存块的首地址;从映射数组中获取与下标值对应的堆内存块首地址;如果目标内存地址属于堆内存块首地址对应的内存地址范围,则确定堆内存块首地址对应的堆内存块为与目标内存地址匹配的目标堆内存块。可选的,计算目标内存地址对应的映射数组的下标值,包括:根据第一公式:计算目标内存地址对应的映射数组的下标值;其中,运算符号表示向上取整运算。可选的,在获取目标内存地址,并计算目标内存地址对应的映射数组的下标值之前,还包括:将堆内存均分为固定大小的映射内存,映射内存的大小大于等于最小堆内存块的大小;根据堆内存大小以及映射内存大小,计算映射数组的内存大小;根据映射数组的内存大小,为映射数组分配对应的内存;遍历堆的内存块链表中的各个堆内存块,对映射数组进行初始化;其中,各个堆内存块的大小不固定,一个映射内存至少对应一个堆内存块。可选的,根据堆内存大小以及映射内存大小,计算映射数组的内存大小,包括:根据系统地址位宽,确定映射数组的各数组元素的内存大小;根据第二公式:映射数组的内存大小=堆内存大小/映射内存大小*数组元素大小,计算映射数组的内存大小。可选的,遍历堆的内存块链表中的各个堆内存块,对映射数组进行初始化,包括:根据第一公式,计算当前堆内存块的首地址对应的映射数组的起始下标和尾地址对应的映射数组的结束下标;用当前堆内存块的首地址,更新映射数组的起始下标到终止下标之间的数组元素;更新当前堆内存块,返回执行根据第一公式,计算当前堆内存块的首地址对应的映射数组的起始下标和尾地址对应的映射数组的结束下标的操作,直至堆的内存块链表中的所有堆内存块全部完成映射。可选的,还包括:在检测到分配内存或者释放内存操作时,判断是否有新的堆内存块产生;如果是,则根据各个新的堆内存块的首地址和尾地址,对映射数组进行更新。可选的,在从映射数组中获取与下标值对应的内存块首地址之后,还包括:如果目标内存地址不属于堆内存块首地址对应的内存地址范围,则从堆内存块首地址开始,按照内存地址变小的方向,遍历堆的内存块链表中的其他堆内存块,以找到与目标内存地址匹配的目标堆内存块。第二方面,本专利技术实施例还提供了一种堆内存块查找装置,应用于嵌入式系统,包括:计算模块,用于获取目标内存地址,并计算目标内存地址对应的映射数组的下标值;映射数组的各数组元素分别对应一个固定大小的映射内存,各数组元素中分别存储包括与其对应的映射内存的尾地址的堆内存块的首地址;获取模块,用于从映射数组中获取与下标值对应的堆内存块首地址;判断模块,用于如果目标内存地址属于堆内存块首地址对应的内存地址范围,则确定堆内存块首地址对应的堆内存块为与目标内存地址匹配的目标堆内存块。第三方面,本专利技术实施例还提供了一种设备,应用于嵌入式系统,设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现本专利技术任意实施例提供的堆内存块查找方法。第四方面,本专利技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本专利技术任意实施例提供的堆内存块查找方法。本专利技术实施例的技术方案,应用于嵌入式系统,通过获取目标内存地址,并计算目标内存地址对应的映射数组的下标值;从映射数组中获取与下标值对应的堆内存块首地址;如果目标内存地址属于堆内存块首地址对应的内存地址范围,则确定堆内存块首地址对应的堆内存块为与目标内存地址匹配的目标堆内存块,解决了现有技术只能在堆内存块大小固定,并且已知要查找的堆内存块的指定内存地址的情况下查找堆内存块的问题,实现了对于嵌入式系统中堆内存范围内的任意内存地址,都可以通过地址解析计算,快速定位到内存块链表中的堆内存块。附图说明图1a是本专利技术实施例一中的一种堆内存块查找方法的流程图;图1b是本专利技术实施例一中的一种堆内存块与映射数组的对应关系示意图;图1c是本专利技术实施例一中的一种堆内存块的更新示意图;图2是本专利技术实施例二中的一种堆内存块查找装置的结构示意图;图3是本专利技术实施例三中的一种设备的结构示意图。具体实施方式下面结合附图和实施例对本专利技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术,而非对本专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术相关的部分而非全部结构。实施例一图1a是本专利技术实施例一中的一种堆内存块查找方法的流程图,本实施例可适用于根据嵌入式系统中的任一堆内存地址,查找对应的堆内存块的情况,该方法可以由堆内存块查找装置来执行,该装置可以由硬件和/或软件来实现,并一般可以集成在提供堆内存块查找服务的设备中。如图1a所示,该方法包括:步骤110、获取目标内存地址,并计算目标内存地址对应的映射数组的下标值。本实施例中,目标内存地址可以是整个堆内存范围内的任一内存地址,映射数组的各数组元素分别对应一个固定大小的映射内存,各数组元素中分别存储包括与其对应的映射内存的尾地址的堆内存块的首地址。其中,堆内存包括的各个堆内存块按照内存地址的大小依次存储在链表中,各个堆内存块的大小不一定相同,映射内存的大小与堆内存块的大小也不一定相同,一个映射内存的地址范本文档来自技高网...

【技术保护点】
1.一种堆内存块查找方法,其特征在于,应用于嵌入式系统,包括:/n获取目标内存地址,并计算所述目标内存地址对应的映射数组的下标值;所述映射数组的各数组元素分别对应一个固定大小的映射内存,各数组元素中分别存储包括与其对应的映射内存的尾地址的堆内存块的首地址;/n从所述映射数组中获取与所述下标值对应的堆内存块首地址;/n如果所述目标内存地址属于所述堆内存块首地址对应的内存地址范围,则确定所述堆内存块首地址对应的堆内存块为与所述目标内存地址匹配的目标堆内存块。/n

【技术特征摘要】
1.一种堆内存块查找方法,其特征在于,应用于嵌入式系统,包括:
获取目标内存地址,并计算所述目标内存地址对应的映射数组的下标值;所述映射数组的各数组元素分别对应一个固定大小的映射内存,各数组元素中分别存储包括与其对应的映射内存的尾地址的堆内存块的首地址;
从所述映射数组中获取与所述下标值对应的堆内存块首地址;
如果所述目标内存地址属于所述堆内存块首地址对应的内存地址范围,则确定所述堆内存块首地址对应的堆内存块为与所述目标内存地址匹配的目标堆内存块。


2.根据权利要求1所述的方法,其特征在于,计算所述目标内存地址对应的映射数组的下标值,包括:
根据第一公式:计算所述目标内存地址对应的映射数组的下标值;
其中,运算符号表示向上取整运算。


3.根据权利要求2所述的方法,其特征在于,在获取目标内存地址,并计算所述目标内存地址对应的映射数组的下标值之前,还包括:
将堆内存均分为固定大小的映射内存,所述映射内存的大小大于等于最小堆内存块的大小;
根据堆内存大小以及映射内存大小,计算所述映射数组的内存大小;
根据所述映射数组的内存大小,为所述映射数组分配对应的内存;
遍历堆的内存块链表中的各个堆内存块,对所述映射数组进行初始化;
其中,各个堆内存块的大小不固定,一个映射内存至少对应一个堆内存块。


4.根据权利要求3所述的方法,其特征在于,根据堆内存大小以及映射内存大小,计算所述映射数组的内存大小,包括:
根据系统地址位宽,确定所述映射数组的各数组元素的内存大小;
根据第二公式:映射数组的内存大小=堆内存大小/映射内存大小*数组元素大小,计算所述映射数组的内存大小。


5.根据权利要求3所述的方法,其特征在于,遍历堆的内存块链表中的各个堆内存块,对所述映射数组进行初始化,包括:
根据第一公式,计算当前堆内存块的首地址对应的映射数组的起始下标和尾地址对应的映射数组的结束下标;
用当前堆内存块的首地址,...

【专利技术属性】
技术研发人员:王小军成丕晶苏盘社
申请(专利权)人:北京东土军悦科技有限公司
类型:发明
国别省市:北京;11

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

1