CN115617504A - 一种内存管理系统、泄露检测方法及存储介质 - Google Patents
一种内存管理系统、泄露检测方法及存储介质 Download PDFInfo
- Publication number
- CN115617504A CN115617504A CN202211084067.9A CN202211084067A CN115617504A CN 115617504 A CN115617504 A CN 115617504A CN 202211084067 A CN202211084067 A CN 202211084067A CN 115617504 A CN115617504 A CN 115617504A
- Authority
- CN
- China
- Prior art keywords
- memory
- application
- point
- calling
- red
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 44
- 238000000034 method Methods 0.000 claims description 37
- 230000006870 function Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 4
- 230000036541 health Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及一种内存管理系统、泄露检测方法及存储介质。其中,内存管理系统包括内存操作接口、内存池和红黑树,泄露检测方法包括:在应用程序稳定运行的情况下,获取应用程序的红黑树的第一快照;在内存池的占用率大于或等于预设值时,获取应用程序的红黑树的第二快照;根据第一快照和第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。通过采用本申请所提供的内存管理系统和泄露检测方法能够改善现有技术中泄露检测不及时的问题。
Description
技术领域
本申请涉及内存检测技术领域,特别是涉及一种内存管理系统、泄露检测方法及存储介质。
背景技术
内存(Memory)也被称为内存储器,其作用是用于暂时存放处理器中的运算数据,以及与硬盘等外部存储器交换的数据。在应用程序开始运行时,处理器会将部分内存分配给应用程序,以满足应用程序的数据运算需要,因此内存是否正常决定了应用程序是否能够稳定运行。
但是在嵌入式软件开发过程中,内存往往会出现一些无法避免的异常,例如内存泄露等。内存泄露问题是经常发生和困扰软件开发人员的主要问题之一,而且内存泄露很难检查出来。目前在现有技术中,可以利用内存健康检测工具等对内存进行检测,但是内存健康检测工具需要应用程序运行于其上下文环境中,并在应用程序退出之后才能检测内存是否异常。
可见,由于现有技术在应用程序退出之后才能检测内存是否存在泄露问题,因此现有技术存在着泄露检测不及时的问题。
发明内容
基于此,本申请提供一种内存管理系统、泄露检测方法及存储介质,改善现有技术中泄露检测不及时的问题。
第一方面,本申请提供了一种内存管理系统,该内存管理系统包括:用于接收调用点的内存操作指令的内存操作接口,其中,内存操作接口包括内存分配接口和内存释放接口,内存操作指令包括内存分配指令和内存释放指令;用于为调用点分配内存块的内存池,其中,内存池包括至少一个内存块,各内存块分别包括第一特征信息,第一特征信息用于指示内存块的分配情况;用于记录调用点的第二特征信息的红黑树,其中,第二特征信息包括调用点的申请信息和申请次数,申请信息包括调用点的代码文件名、代码行号和/或任务标识,申请次数为调用点所占用的内存块的个数。
第二方面,本申请提供了一种泄露检测方法,该泄露检测方法包括:在应用程序稳定运行的情况下,获取应用程序的红黑树的第一快照;在内存池的占用率大于或等于预设值时,获取应用程序的红黑树的第二快照;根据第一快照和第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。
结合第二方面,在第二方面的第一种可实施方式中,确定出存在泄露风险的目标调用点的步骤之后,还包括:在红黑树中查找目标调用点的第二特征信息;打印出目标调用点的第二特征信息,以提示目标调用点存在泄露风险。
结合第二方面,在第二方面的第二种可实施方式中,在接收到调用点的内存释放指令的情况下,方法还包括:在红黑树中查找调用点的申请信息和申请次数;将调用点的申请次数减一;若调用点的申请次数在减一之后等于零,则在红黑树中删除调用点的第二特征信息;修改调用点对应的目标内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
结合第二方面的第二种可实施方式,在第二方面的第三种可实施方式中,在接收到调用点的内存释放指令的情况下,方法还包括:读取目标内存块的第一特征信息,其中,第一特征信息包括特征码、使用信息和索引信息,特征码包括内存块的起始点和结束点,使用信息包括内存大小、是否已分配、是否已释放以及释放点信息,索引信息用于在红黑树中查找对应的第二特征信息;根据第一特征信息确定目标内存块是否存在重复释放风险。
结合第二方面的第三种可实施方式,在第二方面的第四种可实施方式中,根据第一特征信息确定目标内存块是否存在重复释放风险的步骤之后,还包括:在确定目标内存块是否存在重复释放风险的情况下,将前一次释放的内存块所对应的调用点作为目标调用点;提示内存存在重复释放风险。
结合第二方面,在第二方面的第五种可实施方式中,在接收到调用点的内存分配指令的情况下,方法还包括:将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的申请信息,若查找失败,则在红黑树中记录调用点的申请信息和申请次数,并将申请次数置为一;若查找成功,则将调用点的申请次数加一;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
第三方面本申请提供了一种内存管理系统,该内存管理系统包括:获取单元,用于在应用程序稳定运行的情况下,获取应用程序的红黑树的第一快照;在内存池的占用率大于或等于预设值时,获取应用程序的红黑树的第二快照;确定单元,用于根据第一快照和第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。
结合第三方面,在第三方面的第一种可实施方式中,内存管理系统还包括提示单元,该提示单元用于:在红黑树中查找目标调用点的第二特征信息;打印出目标调用点的第二特征信息,以提示目标调用点存在泄露风险。
结合第三方面,在第三方面的第二种可实施方式中,内存管理系统还包括释放单元,该释放单元用于:在红黑树中查找调用点的申请信息和申请次数;将调用点的申请次数减一;若调用点的申请次数在减一之后等于零,则在红黑树中删除调用点的第二特征信息;修改调用点对应的目标内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
结合第三方面的第二种可实施方式,在第三方面的第三种可实施方式中,确定单元还用于:读取目标内存块的第一特征信息,其中,第一特征信息包括特征码、使用信息和索引信息,特征码包括内存块的起始点和结束点,使用信息包括内存大小、是否已分配、是否已释放以及释放点信息,索引信息用于在红黑树中查找对应的第二特征信息;根据第一特征信息确定目标内存块是否存在重复释放风险。
结合第三方面的第三种可实施方式,在第三方面的第四种可实施方式中,内存管理系统还包括提示单元,该提示单元用于:在确定目标内存块是否存在重复释放风险的情况下,将前一次释放的内存块所对应的调用点作为目标调用点;提示内存存在重复释放风险。
结合第三方面,在第三方面的第五种可实施方式中,内存管理系统还包括分配单元,该分配单元用于:将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的申请信息,若查找失败,则在红黑树中记录调用点的申请信息和申请次数,并将申请次数置为一;若查找成功,则将调用点的申请次数加一;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
第四方面,本申请还提供了一种内存管理系统,该内存管理系统包括处理器和存储器,处理器和存储器通过总线连接;处理器,用于执行多条指令;存储器,用于存储多条指令,指令适于由处理器加载并执行如第一方面或第一方面的任意一项实施方式的泄露检测方法。
第五方面,本申请还提供了一种计算机可读存储介质,计算机可读存储介质中存储有多条指令,指令适于由处理器加载并执行如第一方面或第一方面的任意一项实施方式的泄露检测方法。
综上,本申请提供了一种内存管理系统、泄露检测方法及存储介质,其中,泄露检测方法应用于内存管理系统。本申请的内存管理系统通过比对红黑树的第一快照和第二快照,实现了在应用程序的运行过程中对内存进行泄露检测,在此过程中,不需要退出应用程序,也不会影响应用程序运行,因此不会影响应用程序的功能实现。总的来说,通过采用本申请所提供的内存管理系统和泄露检测方法能够改善现有技术中泄露检测不及时的问题。
附图说明
图1为一个实施例中内存管理系统的示意性框图;
图2为一个实施例中泄露检测方法的流程示意图;
图3为本申请提供的一种内存管理系统的示意性框图;
图4为本申请提供的一种内存管理系统的结构性框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
由于本申请实施例涉及相对较多的专业术语,为了便于理解,下面先对本申请实施例可能涉及的相关术语和概念进行介绍。
1、内存泄露
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
2、内存分配指令
内存分配指令指的是用于为应用程序的调用点申请内存空间的指令,例如malloc指令。malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址。
3、内存释放指令
内存释放指令指的是用于为应用程序的调用点释放内存空间的指令,例如free指令。free指令用于将malloc申请得到一块连续的指定大小的内存块进行释放。
4、内存重复释放
重复释放是指两次释放同一个内存块。具体的,应用程序在分配得到一块内存之后,经过使用将这块内存释放,但并没有将指向这块内存的所有指针抹零或回收,使得在下一次对同一个内存块进行释放。
5、红黑树(Red Black Tree)
红黑树是一种自平衡二叉查找树,具有很高的读取性能,并且在插入或删除节点方面具有更高的效率。在本申请中,通过红黑树来存储应用程序的调用点的申请信息和申请次数等,来提高数据的查找和存储效率。
需要说明的是,本申请接下来涉及到的处理器可以包括但不限于中央处理器(central processing unit,CPU),通用处理器,协处理器,数字信号处理器(digitalsignal processor,DSP),专用集成电路(application-specific integrated circuit,ASIC),现场可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。处理器可以实现本申请的所描述的方法,例如响应应用程序的调用点的内存操作指令等,本申请对此不再赘述。
还需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。本说明书所附图式所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容得能涵盖的范围内。同时,本说明书中所引用的如“上”、“下”、“左”、“右”、“中间”、“纵向”、“横向”、“水平”、“内”、“外”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,亦仅为了便于简化叙述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,其相对关系的改变或调整,在无实质变更技术内容下,当亦视为本发明可实施的范畴。因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
目前,由于现有技术在应用程序退出之后才能检测内存是否泄露,无法在程序运行的过程中,且不影响应用程序正常运行的情况下,实现对内存的及时检测。因此现有技术还存在着泄露检测不及时的问题。
对此,本申请提供了一种内存管理系统和泄露检测方法,能够改善现有技术中泄露检测不及时的问题。其中,泄露检测方法应用于内存管理系统,该内存管理系统包括内存操作接口、内存池以及红黑树。具体的:
如图1所示,内存管理系统包括内存操作接口、内存池和红黑树。具体的:内存操作接口110用于接收调用点的内存操作指令,内存操作接口包括内存分配接口和内存释放接口,内存操作指令包括内存分配指令和内存释放指令。内存池120用于为调用点分配内存块,内存池包括至少一个内存块,各内存块分别包括第一特征信息,第一特征信息包括位于内存块首部的前特征部分和/或位于内存块尾部的后特征部分(每部分各16字节),第一特征信息包括特征码、使用信息和索引信息,特征码包括内存块的起始点和结束点,使用信息包括内存大小、是否已分配、是否已释放以及释放点信息,索引信息用于在红黑树中查找对应的第二特征信息。红黑树130用于记录调用点的第二特征信息,第二特征信息用于指示调用点的申请情况,第二特征信息包括申请信息和申请次数,申请信息包括调用点的代码文件名、代码行号和/或任务标识,申请次数为调用点所占用的内存块的个数。需要说明的是,内存块在未被分配时,其特征信息中的部分字段为空值,在内存块被分配之后才会添加具体数值,例如调用点的索引信息、任务标识。相应的,内存块的特征信息中的部分字段始终不为空,例如特征码。
本申请的泄露检测方法实施于应用程序的运行过程中,能够改善现有技术中泄露检测不及时的问题。具体的,当内存管理系统在实施泄露检测方法时,先在应用程序稳定运行的情况下,获取应用程序的红黑树的第一快照,然后在内存池的占用率大于或等于预设值时,获取应用程序的红黑树的第二快照;最后根据第一快照和第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。可见,本申请实现了在应用程序运行的过程中及时的对内存进行泄露检测,在此过程中,不需要退出应用程序,也不会影响应用程序运行,因此不会影响应用程序的功能实现。另外,本申请提供的泄露检测方法还可以自动定位泄露的调用点。
需要说明的是,内存管理系统除了可以进行泄露检测以外,还可以实现例如内存池初始化、创建红黑树以及响应内存操作指令等功能。接下来,本申请将会对内存管理系统可实现的一些功能进行说明,具体的:
在应用程序开始运行时,内存管理系统先对内存进行初始化,即内存管理系统根据应用程序的使用特性创建包括多个内存块的内存池,并且该多个内存块中内存大小相同的内存块存放在同一条链表中未分配内存链表中。同一条未分配内存链表中的内存块的大小相同,这使得后续在为应用程序的调用点分配内存块时,可以根据调用点所需的内存大小从对应的未分配内存链表中快速获取得到空闲的内存块。另外,当内存池中的内存块不够的情况下,内存管理系统还可以动态的从系统内存中自动分配内存,并根据内存块大小挂入对应的未分配内存链表中。
在应用程序开始运行时,内存管理系统还创建了一颗红黑树,该红黑树用于存储应用程序的调用点的第二特征信息。内存管理系统在响应内存管理系统的内存操作指令时,除了对内存块进行分配和释放,还相应的对红黑树进行了修改。需要说明的是,本申请通过红黑树来记录调用点的申请信息和申请次数是为了通过提高查找效率来提高泄露检测的效率,比如在响应内存分配指令时,可以通过在红黑树中查找调用点的申请信息,快速查找到调用点是否有申请记录,从而对调用点的申请次数进行修改,方便内存管理系统检测内存是否存在泄漏风险,后续将对此进行详述。
在应用程序开始运行之后,应用程序的调用点通过内存管理系统的内存操作接口向内存管理系统发送内存操作指令,以指示内存管理系统中的内存池为应用程序的调用点分配或释放内存块。当内存分配接口(malloc)接收到调用点的内存分配指令时,内存池为调用点分配内存块,也即是将未分配内存链表中获取一个空闲的内存块存放到已分配内存链表中;当内存分配接口(free)接收到调用点的内存释放指令时,内存池为调用点释放内存块,也即是将调用点占用的内存块从已分配内存链表取出后重新挂到未分配内存链表中。其中,内存分配接口和内存释放接口可以被封装在内存管理模块中,该内存管理模块抽象内存分配接口(malloc)和内存释放接口(free)。该内存管理模块用于替换系统的内存管理接口,使得应用程序对内存的申请和释放都通过该内存管理模块的接口进行。应用程序调用该内存管理模块的接口时,接口自动隐形将调用点的申请信息(例如文件名、行号和任务标识等)传达给内存管理系统。
在一个实施例中,如图2所示,基于以上描述内容,本申请提供了一种泄露检测方法,以该方法应用于图1所示的内存管理系统,内存管理系统为执行主体为例进行说明,包括以下步骤:
201:在应用程序稳定运行的情况下,获取应用程序的红黑树的第一快照。
其中,红黑树用于记录调用点的申请次数和申请信息。应用程序稳定运行指的是应用程序内的大部分调用点都分配得到内存块的时候,比如应用程序运行预设时间时,内存池的占用率(内存池中的所有已分配的内存块的大小与内存池的大小总和之比)达到50%时等,本申请对此不做限制。内存管理系统在应用程序开始稳定运行时,对应用程序的红黑树进行快照,得到该红黑树的第一快照,并保存到闪存中。
202:在内存池的占用率大于或等于预设值时,获取应用程序的红黑树的第二快照。
其中,内存管理系统对内存池的占用率进行监测,若监测到内存池的占用率达到预设值(例如85%)时,对应用程序的红黑树进行快照,得到该红黑树的第二快照,并保存到闪存中。
203:根据第一快照和第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。
其中,由于第一快照和第二快照分别记录了应用程序在两个时刻的红黑树的数据,两个时刻也即是应用程序开始稳定运行时和内存池的占用率达到预设值时,因此内存管理系统在从闪存中获取得到应用程序的红黑树的第一快照和第二快照之后,可以通过对比该第一快照和第二快照,确定出各调用点的申请次数的增长量,从中获取增长量排名前N位(例如前十位)的调用点作为目标调用点。
举例来说,内存管理系统读取第二快照中的各调用点的第二申请次数,并在第一快照中对应查找第二快照中的各调用点的第一申请次数,将第二申请次数减去第一申请次数,得到第二快照中的各调用点的申请次数的增长量,将第二快照中申请次数增长最大的调用点作为目标调用点。更详细的举例,假设第二快照中记录有三个调用点A、B和C的申请次数,该三个调用点的申请次数分别为a1、b1和c1。在第一快照中查找到A和B的申请次数分别为a2和b2,未查找到C的申请次数,因此A、B和C的申请次数的增长量分别为(a1-a2)、(b1-b2)和c1,将A、B和C中申请次数增长最大的作为目标调用点。
在一种可实施的方式中,确定出存在泄露风险的目标调用点的步骤之后,还包括:在红黑树中查找目标调用点的第二特征信息;打印出目标调用点的第二特征信息,以提示目标调用点存在泄露风险。
其中,第二特征信息包括申请信息和申请次数,申请次数为调用点所占用的内存块的个数,申请信息包括代码文件名、代码行号和任务标识,使得用户可以根据申请信息快速定位到存在泄露风险的目标调用点,并采取有效的应对措施。需要说明的是,由于内存管理系统在为调用点分配内存块的同时,还通过内存管理模块的接口获取了调用点的申请信息和申请次数,并将调用点的申请信息和申请次数记录在了红黑树中,因此正在占用内存块的各个调用点的第二特征信息都记录在红黑树中,使得内存管理系统可以在红黑树中查找得到目标调用点的第二特征信息,并将目标调用点的第二特征信息打印出来,以提示用户目标调用点存在泄露风险。
在一种可实施的方式中,内存管理系统还可以通过内存操作接口接收并响应调用点的内存操作指令,以实现内存分配和内存释放。内存分配指的是:当内存管理系统通过内存分配接口接收到调用点的内存分配指令时,则为调用点分配一个空闲的内存块。内存释放指的是,当内存管理系统通过内存释放接口接收到调用点的内存释放指令时,将调用点占用的内存块释放为空闲的内存块。接下来,本申请将会对内存分配和内存释放的过程进行详细说明,具体的:
内存分配过程:在接收到调用点的内存释放指令的情况下,内存管理系统在红黑树中查找调用点的申请信息和申请次数;将调用点的申请次数减一;若调用点的申请次数在减一之后等于零,则在红黑树中删除调用点的第二特征信息;修改调用点对应的目标内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
其中,当内存操作指令为内存分配指令时,内存管理系统从未分配内存链表中获取一个空闲的内存块作为目标内存块,分配给调用点,并将目标内存块挂入已分配内存链表中。内存管理系统一方面修改目标内存块中的第一特征信息,将第一特征信息中的是否已分配修改为“是”,另一方面,在红黑树中查找调用点的申请信息,从而查找到调用点对应的叶子节点,叶子节点中记录了调用点的第二特征信息(包括申请信息和申请次数),若在红黑树中查找到调用点的申请信息,则将调用点的申请次数加一,若在红黑树中未查找到调用点的申请信息,则在红黑树中新建叶子节点,并在该新建的叶子节点中记录调用点的申请信息和申请次数。最后,将第一特征信息与调用点在红黑树中的第二特征信息进行关联,也即是在特征信息的索引信息中记录调用点的申请信息和申请次数在红黑树中的位置,使得后续可以通过该索引信息快速查找到记录在红黑树中的调用点的申请信息和申请次数等。
内存释放过程:在接收到调用点的内存分配指令的情况下,内存管理系统将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的申请信息,若查找失败,则在红黑树中记录调用点的申请信息和申请次数,并将申请次数置为一;若查找成功,则将调用点的申请次数加一;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
其中,当内存操作指令为内存释放指令时,内存管理系统先通过内存管理模块的接口获取调用点的申请信息,然后在红黑树中查找调用点的申请信息和申请次数,并将调用点的申请次数减一。如果调用点的申请次数在减一之后等于零,说明调用点不存在其他正在占用的内存块,因此一方面在红黑树中删除调用点的申请信息和申请次数,另一方面修改调用点对应的内存块中的第一特征信息,例如将第一特征信息中的是否已分配修改为“否”,清除索引信息,将是否已释放标记为已释放,在释放点信息处记录释放的调用点的申请信息。最后内存管理系统将释放的内存块重新挂到内存池中的未分配内存链表中。其中,第一特征信息中的是否已释放和释放点信息用于判断内存块是否存在重复释放情况。
在一种可实施的方式中,内存管理系统在接收到调用点的内存释放指令的情况下,读取目标内存块的第一特征信息,其中,第一特征信息包括特征码、使用信息和索引信息,特征码包括内存块的起始点和结束点,使用信息包括内存大小、是否已分配、是否已释放以及释放点信息,索引信息用于在红黑树中查找对应的第二特征信息;根据第一特征信息确定目标内存块是否存在重复释放风险。
其中,当内存操作指令是内存分配指令时,内存管理系统为调用点分配一个空闲的内存块,并将该空闲的内存块作为目标内存块,并检测目标内存块中的特征信息中的特征码和使用信息是否被破坏,例如特征码是否与预设字符串一致,使用信息是否正确等;当内存操作指令是内存释放指令时,内存管理系统将已分配给调用点的内存块作为目标内存块,此时除了可以通过检测特征信息中的特征码和使用信息是否被破坏以外,还可以对调用点的索引信息进行检测,例如检测调用点的索引信息是否为有效等。可见,本可实施方式可以在内存释放时实时的对内存进行重复释放检测,进一步提高内存的检测效率和实时性。
在一种可实施的方式中,根据第一特征信息确定目标内存块是否存在重复释放风险的步骤之后,内存管理系统在确定目标内存块是否存在重复释放风险的情况下,将前一次释放的内存块所对应的调用点作为目标调用点;提示内存存在重复释放风险。
综上,本申请的内存管理系统通过比对红黑树的第一快照和第二快照,实现了在应用程序的运行过程中对内存进行泄露检测,在此过程中,不需要退出应用程序,也不会影响应用程序运行,因此不会影响应用程序的功能实现。总的来说,通过采用本申请所提供的内存管理系统和泄露检测方法能够改善现有技术中泄露检测不及时的问题。
在一个实施例中,本发明实施还提供了一种内存管理系统,参见图3。本发明实施例可以根据上述方法示例对设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本发明实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。如图3所示,该内存管理系统包括获取单元310以及确定单元320,具体的:获取单元310,用于在应用程序稳定运行的情况下,获取应用程序的红黑树的第一快照;获取单元310还用于在内存池的占用率大于或等于预设值时,获取应用程序的红黑树的第二快照;确定单元320,用于根据第一快照和第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。
在一种可实施的方式中,内存管理系统还包括提示单元330,该提示单元330用于:在红黑树中查找目标调用点的第二特征信息;打印出目标调用点的第二特征信息,以提示目标调用点存在泄露风险。
在一种可实施的方式中,内存管理系统还包括释放单元340,该释放单元340用于:在红黑树中查找调用点的申请信息和申请次数;将调用点的申请次数减一;若调用点的申请次数在减一之后等于零,则在红黑树中删除调用点的第二特征信息;修改调用点对应的目标内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
在一种可实施的方式中,确定单元320还用于:读取目标内存块的第一特征信息,其中,第一特征信息包括特征码、使用信息和索引信息,特征码包括内存块的起始点和结束点,使用信息包括内存大小、是否已分配、是否已释放以及释放点信息,索引信息用于在红黑树中查找对应的第二特征信息;根据第一特征信息确定目标内存块是否存在重复释放风险。
在一种可实施的方式中,内存管理系统还包括提示单元330,该提示单元用于:在确定目标内存块是否存在重复释放风险的情况下,将前一次释放的内存块所对应的调用点作为目标调用点;提示内存存在重复释放风险。
在一种可实施的方式中,内存管理系统还包括分配单元350,该分配单元用于:将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的申请信息,若查找失败,则在红黑树中记录调用点的申请信息和申请次数,并将申请次数置为一;若查找成功,则将调用点的申请次数加一;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
综上,内存管理系统先通过获取单元310获取应用程序的红黑树的第一快照和第二快照,然后通过确定单元320根据第一快照和第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。可见,通过采用本申请所提供的内存管理系统和泄露检测方法能够改善现有技术中泄露检测不及时的问题。
在一个实施例中,本申请还提供了一种内存管理系统,参见图4。该内存管理系统可以是但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑、便携式可穿戴设备和服务器,服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。如图所示的本实施例中的内存管理系统可以包括:处理器410和存储器420。上述处理器410和存储器420通过总线430连接。处理器410,用于执行多条指令;存储器420,用于存储多条指令,该指令适于由处理器410加载并执行如上述实施例中的泄露检测方法。
其中,处理器410可以是电子调整单元(Electronic Control Unit,ECU)、中央处理器(central processing unit,CPU),通用处理器,协处理器,数字信号处理器(digitalsignal processor,DSP),专用集成电路(application-specific integrated circuit,ASIC),现场可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。该处理器410也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。在本实施例中,处理器410可采用单片机,通过对单片机进行编程可以实现各种控制功能,比如在本实施例中,实现电芯的容量以及累计充电总量的采集、处理和解调功能,处理器具有计算能力强大,处理快速的优点。具体的:处理器410用于执行获取单元310的功能,用于在应用程序稳定运行的情况下,获取应用程序的红黑树的第一快照;还用于在内存池的占用率大于或等于预设值时,获取应用程序的红黑树的第二快照;还用于执行确定单元320的功能,用于根据第一快照和第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。
在一种可实施的方式中,处理器410还用于执行提示单元330的功能,用于:在红黑树中查找目标调用点的第二特征信息;打印出目标调用点的第二特征信息,以提示目标调用点存在泄露风险。
在一种可实施的方式中,处理器410还用于执行释放单元340的功能,用于:在红黑树中查找调用点的申请信息和申请次数;将调用点的申请次数减一;若调用点的申请次数在减一之后等于零,则在红黑树中删除调用点的第二特征信息;修改调用点对应的目标内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
在一种可实施的方式中,处理器410还用于:读取目标内存块的第一特征信息,其中,第一特征信息包括特征码、使用信息和索引信息,特征码包括内存块的起始点和结束点,使用信息包括内存大小、是否已分配、是否已释放以及释放点信息,索引信息用于在红黑树中查找对应的第二特征信息;根据第一特征信息确定目标内存块是否存在重复释放风险。
在一种可实施的方式中,处理器410还用于:在确定目标内存块是否存在重复释放风险的情况下,将前一次释放的内存块所对应的调用点作为目标调用点;提示内存存在重复释放风险。
在一种可实施的方式中,处理器410还用于执行分配单元350的功能,用于:将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的申请信息,若查找失败,则在红黑树中记录调用点的申请信息和申请次数,并将申请次数置为一;若查找成功,则将调用点的申请次数加一;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
在一种可实施方式中,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有多条指令,指令适于由处理器加载并执行前述任意实施例中的方法。处理器410,用于执行多条指令;存储器420,用于存储多条指令,该指令适于由处理器410加载并执行如上述实施例中的故障上传的方法。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种内存管理系统,其特征在于,包括:
用于接收调用点的内存操作指令的内存操作接口,其中,所述内存操作接口包括内存分配接口和内存释放接口,所述内存操作指令包括内存分配指令和内存释放指令;
用于为所述调用点分配内存块的内存池,其中,所述内存池包括至少一个内存块,各内存块分别包括第一特征信息,所述第一特征信息用于指示内存块的分配情况;
用于记录所述调用点的第二特征信息的红黑树,其中,所述第二特征信息包括所述调用点的申请信息和申请次数,所述申请信息包括所述调用点的代码文件名、代码行号和/或任务标识,所述申请次数为所述调用点所占用的内存块的个数。
2.一种泄露检测方法,应用于内存管理系统,其特征在于,包括:
在应用程序稳定运行的情况下,获取所述应用程序的红黑树的第一快照;
在内存池的占用率大于或等于预设值时,获取所述应用程序的红黑树的第二快照;
根据所述第一快照和所述第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。
3.根据权利要求2所述的方法,其特征在于,所述确定出存在泄露风险的目标调用点的步骤之后,还包括:
在所述红黑树中查找所述目标调用点的第二特征信息;
打印出所述目标调用点的第二特征信息,以提示所述目标调用点存在泄露风险。
4.根据权利要求2所述的方法,其特征在于,在接收到调用点的内存释放指令的情况下,所述方法还包括:
在所述红黑树中查找所述调用点的申请信息和申请次数;
将所述调用点的申请次数减一;若所述调用点的申请次数在减一之后等于零,则在所述红黑树中删除所述调用点的第二特征信息;
修改所述调用点对应的目标内存块中的第一特征信息,并将所述调用点对应的内存块挂到所述内存池中的未分配内存链表中。
5.根据权利要求4所述的方法,其特征在于,在接收到调用点的内存释放指令的情况下,所述方法还包括:
读取所述目标内存块的第一特征信息,其中,所述第一特征信息包括特征码、使用信息和索引信息,所述特征码包括内存块的起始点和结束点,所述使用信息包括内存大小、是否已分配、是否已释放以及释放点信息,所述索引信息用于在红黑树中查找对应的第二特征信息;
根据所述第一特征信息确定所述目标内存块是否存在重复释放风险。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第一特征信息确定所述目标内存块是否存在重复释放风险的步骤之后,还包括:
在确定所述目标内存块是否存在重复释放风险的情况下,将前一次释放的内存块所对应的调用点作为目标调用点;
提示所述内存存在重复释放风险。
7.根据权利要求2所述的方法,其特征在于,在接收到调用点的内存分配指令的情况下,所述方法还包括:
将所述内存池中的未分配的目标内存块分配给所述调用点,并将所述目标内存块挂入已分配内存链表中;
在红黑树中查找所述调用点的申请信息,若查找失败,则在红黑树中记录所述调用点的申请信息和申请次数,并将所述申请次数置为一;若查找成功,则将所述调用点的申请次数加一;
修改所述目标内存块中的第一特征信息,并将所述第一特征信息与所述调用点在所述红黑树中的第二特征信息进行关联。
8.一种内存管理系统,其特征在于,包括:
获取单元,用于在应用程序稳定运行的情况下,获取所述应用程序的红黑树的第一快照;在内存池的占用率大于或等于预设值时,获取所述应用程序的红黑树的第二快照;
确定单元,用于根据所述第一快照和所述第二快照确定各调用点的申请次数的增长量,以确定出存在泄露风险的目标调用点。
9.一种内存管理系统,其特征在于,所述设备包括处理器和存储器,所述处理器和存储器通过总线连接;所述处理器,用于执行多条指令;所述存储介质,用于存储所述多条指令,所述指令适于由所述处理器加载并执行如权利要求2-7中任一项所述的泄露检测方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有多条指令,所述指令适于由处理器加载并执行如权利要求2-7中任一项所述的泄露检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211084067.9A CN115617504A (zh) | 2022-09-06 | 2022-09-06 | 一种内存管理系统、泄露检测方法及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211084067.9A CN115617504A (zh) | 2022-09-06 | 2022-09-06 | 一种内存管理系统、泄露检测方法及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115617504A true CN115617504A (zh) | 2023-01-17 |
Family
ID=84859521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211084067.9A Pending CN115617504A (zh) | 2022-09-06 | 2022-09-06 | 一种内存管理系统、泄露检测方法及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115617504A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117112193A (zh) * | 2023-04-10 | 2023-11-24 | 荣耀终端有限公司 | 内存资源管理方法及电子设备 |
-
2022
- 2022-09-06 CN CN202211084067.9A patent/CN115617504A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117112193A (zh) * | 2023-04-10 | 2023-11-24 | 荣耀终端有限公司 | 内存资源管理方法及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5425286B2 (ja) | データ処理システムのメモリ使用状況を追跡する方法 | |
US9990492B2 (en) | Systems and/or methods for automatically protecting against memory corruption vulnerabilities | |
US7827375B2 (en) | Defensive heap memory management | |
CN106919454B (zh) | 基于lte协议栈的内存池问题定位方法及其系统 | |
US9081692B2 (en) | Information processing apparatus and method thereof | |
CN108829342B (zh) | 一种日志存储方法、系统及存储装置 | |
US10102047B2 (en) | In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources | |
CN114064302B (zh) | 一种进程间通信的方法及装置 | |
CN109150642B (zh) | 应用内存错误检测方法、检测装置及存储介质 | |
CN115617504A (zh) | 一种内存管理系统、泄露检测方法及存储介质 | |
CN115599448A (zh) | 一种基于linux内核ko模块的加载方法及装置 | |
CN112667405A (zh) | 信息处理方法、装置、设备及存储介质 | |
CN115509741A (zh) | 一种内存管理系统、越界检测方法及存储介质 | |
CN108829345B (zh) | 日志文件的数据处理方法和终端设备 | |
CN112433809B (zh) | 一种jvm内存管理方法、装置、设备及可读存储介质 | |
CN112199042A (zh) | 存储空间管理方法、装置、芯片、设备及存储介质 | |
CN113127314B (zh) | 一种检测程序性能瓶颈的方法、装置及计算机设备 | |
CN113704027B (zh) | 文件聚合兼容方法、装置、计算机设备和存储介质 | |
CN110618946A (zh) | 堆栈内存分配方法、装置、设备和存储介质 | |
CN115599542A (zh) | 一种共享内存池实现方法及系统 | |
CN115454696A (zh) | 一种内存泄漏检测的方法、装置及电子设备 | |
CN109343953B (zh) | 内存管理方法、装置及电子设备 | |
CN107844394B (zh) | 一种内存泄漏的定位方法及装置 | |
CN112988610A (zh) | 内存回收处理方法、装置、计算机设备和存储介质 | |
CN116166573B (zh) | 控制内存回收的方法、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20240119 Address after: No. 13 Xingxiang Road, Zengjia Town, High tech Zone, Jiulongpo District, Chongqing, 400039 Applicant after: Chongqing Selis Phoenix Intelligent Innovation Technology Co.,Ltd. Address before: 610095 No. 2901, floor 29, unit 1, building 1, No. 151, Tianfu Second Street, high tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan Province Applicant before: Chengdu Thalys Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right |