CN115509741A - 一种内存管理系统、越界检测方法及存储介质 - Google Patents
一种内存管理系统、越界检测方法及存储介质 Download PDFInfo
- Publication number
- CN115509741A CN115509741A CN202211083836.3A CN202211083836A CN115509741A CN 115509741 A CN115509741 A CN 115509741A CN 202211083836 A CN202211083836 A CN 202211083836A CN 115509741 A CN115509741 A CN 115509741A
- Authority
- CN
- China
- Prior art keywords
- memory
- target
- characteristic information
- memory block
- point
- 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 46
- 238000012544 monitoring process Methods 0.000 claims abstract description 18
- 238000000034 method Methods 0.000 claims description 34
- 230000006870 function Effects 0.000 description 18
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000036541 health Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000005516 engineering process Methods 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
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请涉及一种内存管理系统、越界检测方法及存储介质。其中,内存管理系统包括内存操作接口、内存池和红黑树,越界检测方法包括:监测内存池中的已分配内存链表中的各内存块的第一特征信息;查找被破坏的第一特征信息,及被破坏的第一特征信息所属的目标内存块;根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点。通过采用本申请所提供的内存管理系统和越界检测方法能够改善现有技术中越界检测不及时的问题。
Description
技术领域
本申请涉及内存检测技术领域,特别是涉及一种内存管理系统、越界检测方法及存储介质。
背景技术
内存(Memory)也被称为内存储器,其作用是用于暂时存放处理器中的运算数据,以及与硬盘等外部存储器交换的数据。在应用程序开始运行时,处理器会将部分内存分配给应用程序,以满足应用程序的数据运算需要,因此内存是否正常决定了应用程序是否能够稳定运行。
但是在嵌入式软件开发过程中,内存往往会出现一些无法避免的异常,例如内存越界等。内存越界问题是经常发生和困扰软件开发人员的主要问题之一,而且内存越界很难检查出来。目前在现有技术中,可以利用内存健康检测工具等对内存进行检测,但是内存健康检测工具需要应用程序运行于其上下文环境中,并在应用程序退出之后才能检测内存是否异常。
可见,由于现有技术在应用程序退出之后才能检测内存是否存在越界问题,因此现有技术存在着越界检测不及时的问题。
发明内容
基于此,本申请提供一种内存管理系统、越界检测方法及存储介质,改善现有技术中越界检测不及时的问题。
第一方面,本申请提供了一种内存管理系统,该内存管理系统包括:用于接收调用点的内存操作指令的内存操作接口,其中,内存操作接口包括内存分配接口和内存释放接口,内存操作指令包括内存分配指令和内存释放指令;用于为调用点分配内存块的内存池,其中,内存池包括至少一个内存块,各内存块分别包括第一特征信息,第一特征信息包括位于内存块首部的前特征部分和/或位于内存块尾部的后特征部分;用于记录调用点的第二特征信息的红黑树,第二特征信息用于指示调用点的申请情况。
第二方面,本申请提供了一种越界检测方法,该越界检测方法包括:监测内存池中的已分配内存链表中的各内存块的第一特征信息;查找被破坏的第一特征信息,及被破坏的第一特征信息所属的目标内存块;根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点。
结合第二方面,在第二方面的第一种可实施方式中,根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点的步骤,包括:在目标内存块的前特征部分被破坏的情况下,依次对物理地址小于所述目标内存块的内存块进行前向查找,直到查找到前特征部分完整且后特征部分被破坏的内存块,并将前特征部分完整且后特征部分被破坏的内存块所对应的调用点作为目标调用点;在目标内存块的前特征部分完整且后特征部分被破坏的情况下,将目标内存块所对应的调用点作为目标调用点。
结合第二方面,在第二方面的第二种可实施方式中,确定存在越界风险的目标调用点的步骤之后,还包括:在红黑树中查找目标调用点的第二特征信息,其中,第二特征信息包括申请信息和申请次数,申请信息包括调用点的代码文件名、代码行号和/或任务标识,申请次数为调用点所占用的内存块的个数;打印出目标调用点的申请信息,以提示目标调用点存在越界风险。
结合第二方面,在第二方面的第三种可实施方式中,在接收到调用点的内存分配指令的情况下,方法还包括:将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的第二特征信息,若查找失败,则在红黑树中记录调用点的第二特征信息;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
结合第二方面的第三种可实施方式,在第二方面的第四种可实施方式中,在接收到调用点的内存分配指令的情况下,方法还包括:读取目标内存块的第一特征信息;在目标内存块的第一特征信息被破坏的情况下,确定内存存在越界风险。
结合第二方面,在第二方面的第五种可实施方式中,在接收到调用点的内存释放指令的情况下,方法还包括:在红黑树中查找调用点的第二特征信息;修改调用点在红黑树中的第二特征信息;修改调用点对应的内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
第三方面本申请提供了一种内存管理系统,该内存管理系统包括:监测单元,用于监测内存池中的已分配内存链表中的各内存块的第一特征信息;定位单元,用于查找被破坏的第一特征信息,及被破坏的第一特征信息所属的目标内存块;确定单元,用于根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点。
结合第三方面,在第三方面的第一种可实施方式中,确定单元具体用于:在目标内存块的前特征部分被破坏的情况下,依次对物理地址小于所述目标内存块的内存块进行前向查找,直到查找到前特征部分完整且后特征部分被破坏的内存块,并将前特征部分完整且后特征部分被破坏的内存块所对应的调用点作为目标调用点;在目标内存块的前特征部分完整且后特征部分被破坏的情况下,将目标内存块所对应的调用点作为目标调用点。
结合第三方面,在第三方面的第二种可实施方式中,内存管理系统还包括提示单元,该提示单元用于:在红黑树中查找目标调用点的第二特征信息,其中,第二特征信息包括申请信息和申请次数,申请信息包括调用点的代码文件名、代码行号和/或任务标识,申请次数为调用点所占用的内存块的个数;打印出目标调用点的申请信息,以提示目标调用点存在越界风险。
结合第三方面,在第三方面的第三种可实施方式中,内存管理系统还包括分配单元,该分配单元用于:将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的第二特征信息,若查找失败,则在红黑树中记录调用点的第二特征信息;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
结合第三方面的第三种可实施方式,在第三方面的第四种可实施方式中,确定单元还用于:读取目标内存块的第一特征信息;在目标内存块的第一特征信息被破坏的情况下,确定内存存在越界风险。
结合第三方面,在第三方面的第五种可实施方式中,内存管理系统还包括释放单元,该释放单元用于:在红黑树中查找调用点的第二特征信息;修改调用点在红黑树中的第二特征信息;修改调用点对应的内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
第四方面,本申请还提供了一种内存管理系统,该内存管理系统包括处理器和存储器,处理器和存储器通过总线连接;处理器,用于执行多条指令;存储器,用于存储多条指令,指令适于由处理器加载并执行如第一方面或第一方面的任意一项实施方式的越界检测方法。
第五方面,本申请还提供了一种计算机可读存储介质,计算机可读存储介质中存储有多条指令,指令适于由处理器加载并执行如第一方面或第一方面的任意一项实施方式的越界检测方法。
综上,本申请提供了一种内存管理系统、越界检测方法及存储介质,其中,越界检测方法应用于内存管理系统。本申请的内存管理系统通过监测已分配内存链表中的各内存块的第一特征信息,实现了在应用程序的运行过程中对内存进行越界检测,在此过程中,不需要退出应用程序,也不会影响应用程序运行,因此不会影响应用程序的功能实现。总的来说,通过采用本申请所提供的内存管理系统和越界检测方法能够改善现有技术中越界检测不及时的问题。
附图说明
图1为一个实施例中内存管理系统的示意性框图;
图2为一个实施例中越界检测方法的流程示意图;
图3为本申请提供的一种内存管理系统的示意性框图;
图4为本申请提供的一种内存管理系统的结构性框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
由于本申请实施例涉及相对较多的专业术语,为了便于理解,下面先对本申请实施例可能涉及的相关术语和概念进行介绍。
1、内存越界
内存越界又称内存访问越界,是指访问了所申请空间之外的内存。如果对越界的内存进行读操作,读取的结果具有随机性且无法预知;如果对越界的内存进行写操作,写入的结果可能会破坏其他数据。内存越界很难检查出来,因为它不属于语法错误,无法通过编译器发现,并且内存越界无法从根本上避免,只能预防。
2、内存分配指令
内存分配指令指的是用于为应用程序的调用点申请内存空间的指令,例如malloc指令。malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址。
3、内存释放指令
内存释放指令指的是用于为应用程序的调用点释放内存空间的指令,例如free指令。free指令用于将malloc申请得到一块连续的指定大小的内存块进行释放。
4、红黑树(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:监测内存池中的已分配内存链表中的各内存块的第一特征信息。
其中,内存管理系统在应用程序开始运行之后,可以通过一个最低优先级线程来定时监测已分配内存链表的第一特征信息,第一特征信息包括前特征部分和后特征部分。需要说明的是,内存管理系统在执行监测操作时,可以按照顺序监测的方式,也即是从已分配内存链表的头部到尾部的顺序,监测内存池中的已分配内存链表中的各内存块的第一特征信息;还可以还可以按照逆序监测的方式,也即是从已分配内存链表的尾部到头部的逆序,监测内存池中的已分配内存链表中的各内存块的第一特征信息;还可以按照随机监测的方式,监测内存池中的已分配内存链表中的各内存块的第一特征信息。本申请对监测的具体方式不做限制。
202:查找被破坏的第一特征信息,及被破坏的第一特征信息所属的目标内存块。
其中,内存管理系统在已分配内存链表中查找被破坏的第一特征信息,若查找到,则定位到该被破坏的第一特征信息所属的内存块,并将该内存块作为目标内存块。
203:根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点。
其中,内存管理系统根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点。具体的,若目标内存块的前特征部分被破坏,则在物理地址中位于目标内存块之前的内存块所对应的调用点,为存在越界风险的目标调用点;若目标内存块的前特征部分正确,且后特征部分被破坏,则该目标内存块所对应的调用点为存在越界风险的目标调用点。需要说明的是,内存管理系统可以根据内存块中的第一特征信息确定对应的调用点,因为内存块的第一特征信息中的索引信息指向了对应的调用点的申请信息在红黑树中的位置,因此内存管理系统可以根据该索引信息查找到记录在红黑树中的调用点的申请信息,以确定对应的调用点。
在一种可实施的方式中,上述根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点的步骤,包括:在目标内存块的前特征部分被破坏的情况下,依次对物理地址小于所述目标内存块的内存块进行前向查找,直到查找到前特征部分完整的内存块,并将前特征部分完整的内存块所对应的调用点作为目标调用点;在目标内存块的前特征部分完整且后特征部分被破坏的情况下,将目标内存块所对应的调用点作为目标调用点。
其中,若目标内存块的前特征部分被破坏,说明存在越界风险的调用点所占用的内存块的物理地址小于目标内存块,在物理地址中位于目标内存块的前面,因此在目标内存块的前特征部分被破坏的情况下,依次对物理地址小于所述目标内存块的内存块进行前向查找,直到查找到前特征部分完整的内存块,并将前特征部分完整的内存块所对应的调用点作为目标调用点。若目标内存块的前特征部分完整且后特征部分被破坏的情况下,说明该目标内存块对应的调用点为存在越界风险的目标调用点,因此在目标内存块的前特征部分完整且后特征部分被破坏的情况下,将目标内存块所对应的调用点作为目标调用点。
在一种可实施的方式中,内存管理系统在确定存在越界风险的目标调用点的步骤之后,还可以:在红黑树中查找目标调用点的第二特征信息,其中,第二特征信息包括申请信息和申请次数,申请信息包括调用点的代码文件名、代码行号和/或任务标识,申请次数为调用点所占用的内存块的个数;打印出目标调用点的申请信息,以提示目标调用点存在越界风险。
其中,由于内存管理系统在为调用点分配内存块的同时,还通过内存管理模块的接口获取了调用点的申请信息,并将调用点的申请信息记录在了红黑树中,因此正在占用内存块的各个调用点的申请信息都记录在红黑树中,使得内存管理系统可以在红黑树中查找得到目标调用点的申请信息,并将目标调用点的申请信息打印出来,以提示用户目标调用点存在越界风险。另外,申请信息包括代码文件名、代码行号和任务标识,使得用户可以根据申请信息快速定位到存在越界风险的目标调用点,并采取有效的应对措施。
在一种可实施的方式中,内存管理系统还可以通过内存操作接口接收并响应调用点的内存操作指令,以实现内存分配和内存释放。内存分配指的是:当内存管理系统通过内存分配接口接收到调用点的内存分配指令时,则为调用点分配一个空闲的内存块。内存释放指的是,当内存管理系统通过内存释放接口接收到调用点的内存释放指令时,将调用点占用的内存块释放为空闲的内存块。接下来,本申请将会对内存分配和内存释放的过程进行详细说明,具体的:
内存分配过程:在接收到调用点的内存分配指令的情况下,内存管理系统将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的第二特征信息,若查找失败,则在红黑树中记录调用点的第二特征信息;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
其中,当内存操作指令为内存分配指令时,内存管理系统从未分配内存链表中获取一个空闲的内存块作为目标内存块,分配给调用点,并将目标内存块挂入已分配内存链表中。内存管理系统一方面修改目标内存块中的第一特征信息,将第一特征信息中的是否已分配修改为“是”,另一方面,在红黑树中查找调用点的申请信息,从而查找到调用点对应的叶子节点,叶子节点中记录了调用点的第二特征信息(包括申请信息和申请次数),若在红黑树中查找到调用点的申请信息,则将调用点的申请次数加一,若在红黑树中未查找到调用点的申请信息,则在红黑树中新建叶子节点,并在该新建的叶子节点中记录调用点的申请信息和申请次数。最后,将第一特征信息与调用点在红黑树中的第二特征信息进行关联,也即是在特征信息的索引信息中记录调用点的申请信息和申请次数在红黑树中的位置,使得后续可以通过该索引信息快速查找到记录在红黑树中的调用点的申请信息和申请次数等。
内存释放过程:在接收到调用点的内存释放指令的情况下,内存管理系统在红黑树中查找调用点的第二特征信息;修改调用点在红黑树中的第二特征信息;修改调用点对应的内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
其中,当内存操作指令为内存释放指令时,内存管理系统先通过内存管理模块的接口获取调用点的申请信息,然后在红黑树中查找调用点的申请信息和申请次数,并将调用点的申请次数减一。如果调用点的申请次数在减一之后等于零,说明调用点不存在其他正在占用的内存块,因此一方面在红黑树中删除调用点的申请信息和申请次数,另一方面修改调用点对应的内存块中的第一特征信息,例如将第一特征信息中的是否已分配修改为“否”,清除索引信息,将是否已释放标记为已释放,在释放点信息处记录释放的调用点的申请信息。最后内存管理系统将释放的内存块重新挂到内存池中的未分配内存链表中。其中,第一特征信息中的是否已释放和释放点信息用于判断内存块是否存在重复释放情况。
在一种可实施的方式中,内存管理系统在接收到调用点的内存分配指令的情况下,读取目标内存块的第一特征信息;在目标内存块的第一特征信息被破坏的情况下,确定内存存在越界风险。
其中,当内存操作指令是内存分配指令时,内存管理系统为调用点分配一个空闲的内存块,并将该空闲的内存块作为目标内存块,并检测目标内存块中的特征信息中的特征码和使用信息是否被破坏,例如特征码是否与预设字符串一致,使用信息是否正确等;当内存操作指令是内存释放指令时,内存管理系统将已分配给调用点的内存块作为目标内存块,此时除了可以通过检测特征信息中的特征码和使用信息是否被破坏以外,还可以对调用点的索引信息进行检测,例如检测调用点的索引信息是否为有效等。可见,本可实施方式可以在内存分配时实时的对内存进行越界检测,进一步提高内存的检测效率和实时性。
综上,本申请实现了在应用程序运行的过程中及时的对内存进行越界检测,在此过程中,不需要退出应用程序,也不会影响应用程序运行,因此不会影响应用程序的功能实现,能够改善现有技术中越界检测不及时的问题。另外,本申请提供的越界检测方法还可以自动定位越界的调用点,提高了越界检测的效率。
在一个实施例中,本发明实施还提供了一种内存管理系统,参见图3。本发明实施例可以根据上述方法示例对设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本发明实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。如图3所示,该内存管理系统包括监测单元310、定位单元320以及确定单元330,具体的:监测单元310,用于监测内存池中的已分配内存链表中的各内存块的第一特征信息;定位单元320,用于查找被破坏的第一特征信息,及被破坏的第一特征信息所属的目标内存块;确定单元330,用于根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点。
在一种可实施的方式中,确定单元330具体用于:在目标内存块的前特征部分被破坏的情况下,依次对物理地址小于所述目标内存块的内存块进行前向查找,直到查找到前特征部分完整且后特征部分被破坏的内存块,并将前特征部分完整且后特征部分被破坏的内存块所对应的调用点作为目标调用点;在目标内存块的前特征部分完整且后特征部分被破坏的情况下,将目标内存块所对应的调用点作为目标调用点。
在一种可实施的方式中,内存管理系统还包括提示单元340,该提示单元340用于:在红黑树中查找目标调用点的第二特征信息,其中,第二特征信息包括申请信息和申请次数,申请信息包括调用点的代码文件名、代码行号和/或任务标识,申请次数为调用点所占用的内存块的个数;打印出目标调用点的申请信息,以提示目标调用点存在越界风险。
在一种可实施的方式中,内存管理系统还包括分配单元350,该分配单元350用于:将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的第二特征信息,若查找失败,则在红黑树中记录调用点的第二特征信息;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
在一种可实施的方式中,确定单元330还用于:读取目标内存块的第一特征信息;在目标内存块的第一特征信息被破坏的情况下,确定内存存在越界风险。
在一种可实施的方式中,内存管理系统还包括释放单元360,该释放单元360用于:在红黑树中查找调用点的第二特征信息;修改调用点在红黑树中的第二特征信息;修改调用点对应的内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
综上,内存管理系统先通过监测单元310监测内存块的第一特征信息,然后通过定位单元320确定被破坏的第一特征信息所属的目标内存块,最后通过确定单元330根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点。可见,通过采用本申请所提供的内存管理系统和越界检测方法能够改善现有技术中越界检测不及时的问题。
在一个实施例中,本申请还提供了一种内存管理系统,参见图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的功能,用于查找被破坏的第一特征信息,及被破坏的第一特征信息所属的目标内存块;还用于执行确定单元330的功能,用于根据被破坏的第一特征信息在目标内存块中的位置,确定存在越界风险的目标调用点。
在一种可实施的方式中,处理器410具体用于:在目标内存块的前特征部分被破坏的情况下,依次对物理地址小于所述目标内存块的内存块进行前向查找,直到查找到前特征部分完整且后特征部分被破坏的内存块,并将前特征部分完整且后特征部分被破坏的内存块所对应的调用点作为目标调用点;在目标内存块的前特征部分完整且后特征部分被破坏的情况下,将目标内存块所对应的调用点作为目标调用点。
在一种可实施的方式中,处理器410还用于执行提示单元340的功能,用于:在红黑树中查找目标调用点的第二特征信息,其中,第二特征信息包括申请信息和申请次数,申请信息包括调用点的代码文件名、代码行号和/或任务标识,申请次数为调用点所占用的内存块的个数;打印出目标调用点的申请信息,以提示目标调用点存在越界风险。
在一种可实施的方式中,处理器410还用于执行分配单元350的功能,用于:将内存池中的未分配的目标内存块分配给调用点,并将目标内存块挂入已分配内存链表中;在红黑树中查找调用点的第二特征信息,若查找失败,则在红黑树中记录调用点的第二特征信息;修改目标内存块中的第一特征信息,并将第一特征信息与调用点在红黑树中的第二特征信息进行关联。
在一种可实施的方式中,处理器410还用于:读取目标内存块的第一特征信息;在目标内存块的第一特征信息被破坏的情况下,确定内存存在越界风险。
在一种可实施的方式中,处理器410还用于执行释放单元360的功能,用于:在红黑树中查找调用点的第二特征信息;修改调用点在红黑树中的第二特征信息;修改调用点对应的内存块中的第一特征信息,并将调用点对应的内存块挂到内存池中的未分配内存链表中。
在一种可实施方式中,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有多条指令,指令适于由处理器加载并执行前述任意实施例中的方法。处理器410,用于执行多条指令;存储器420,用于存储多条指令,该指令适于由处理器410加载并执行如上述实施例中的故障上传的方法。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种内存管理系统,其特征在于,包括:
用于接收调用点的内存操作指令的内存操作接口,其中,所述内存操作接口包括内存分配接口和内存释放接口,所述内存操作指令包括内存分配指令和内存释放指令;
用于为所述调用点分配内存块的内存池,其中,所述内存池包括至少一个内存块,各内存块分别包括第一特征信息,所述第一特征信息包括位于内存块首部的前特征部分和/或位于内存块尾部的后特征部分;
用于记录所述调用点的第二特征信息的红黑树,所述第二特征信息用于指示所述调用点的申请情况。
2.一种越界检测方法,应用于内存管理系统,其特征在于,包括:
监测内存池中的已分配内存链表中的各内存块的第一特征信息;
查找被破坏的第一特征信息,及所述被破坏的第一特征信息所属的目标内存块;
根据所述被破坏的第一特征信息在所述目标内存块中的位置,确定存在越界风险的目标调用点。
3.根据权利要求2所述的方法,其特征在于,所述根据所述被破坏的第一特征信息在所述目标内存块中的位置,确定存在越界风险的目标调用点的步骤,包括:
在所述目标内存块的前特征部分被破坏的情况下,依次对物理地址小于所述目标内存块的内存块进行前向查找,直到查找到前特征部分完整且后特征部分被破坏的内存块,并将所述前特征部分完整且后特征部分被破坏的内存块所对应的调用点作为目标调用点;
在所述目标内存块的前特征部分完整且后特征部分被破坏的情况下,将所述目标内存块所对应的调用点作为所述目标调用点。
4.根据权利要求2所述的方法,其特征在于,所述确定存在越界风险的目标调用点的步骤之后,还包括:
在红黑树中查找所述目标调用点的第二特征信息,其中,所述第二特征信息包括申请信息和申请次数,申请信息包括调用点的代码文件名、代码行号和/或任务标识,申请次数为调用点所占用的内存块的个数;
打印出所述目标调用点的申请信息,以提示所述目标调用点存在越界风险。
5.根据权利要求2所述的方法,其特征在于,在接收到调用点的内存分配指令的情况下,所述方法还包括:
将所述内存池中的未分配的目标内存块分配给所述调用点,并将所述目标内存块挂入所述已分配内存链表中;
在红黑树中查找所述调用点的第二特征信息,若查找失败,则在红黑树中记录所述调用点的第二特征信息;
修改所述目标内存块中的第一特征信息,并将所述第一特征信息与所述调用点在所述红黑树中的第二特征信息进行关联。
6.根据权利要求5所述的方法,其特征在于,在接收到调用点的内存分配指令的情况下,所述方法还包括:
读取所述目标内存块的第一特征信息;
在所述目标内存块的第一特征信息被破坏的情况下,确定内存存在越界风险。
7.根据权利要求2所述的方法,其特征在于,在接收到调用点的内存释放指令的情况下,所述方法还包括:
在红黑树中查找所述调用点的第二特征信息;
修改所述调用点在所述红黑树中的第二特征信息;
修改所述调用点对应的内存块中的第一特征信息,并将所述调用点对应的内存块挂到所述内存池中的未分配内存链表中。
8.一种内存管理系统,其特征在于,包括:
监测单元,用于监测内存池中的已分配内存链表中的各内存块的第一特征信息;
定位单元,用于查找被破坏的第一特征信息,及所述被破坏的第一特征信息所属的目标内存块;
确定单元,用于根据所述被破坏的第一特征信息在所述目标内存块中的位置,确定存在越界风险的目标调用点。
9.一种内存管理系统,其特征在于,所述设备包括处理器和存储器,所述处理器和存储器通过总线连接;所述处理器,用于执行多条指令;所述存储介质,用于存储所述多条指令,所述指令适于由所述处理器加载并执行如权利要求2-7中任一项所述的越界检测方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有多条指令,所述指令适于由处理器加载并执行如权利要求2-7中任一项所述的越界检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211083836.3A CN115509741A (zh) | 2022-09-06 | 2022-09-06 | 一种内存管理系统、越界检测方法及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211083836.3A CN115509741A (zh) | 2022-09-06 | 2022-09-06 | 一种内存管理系统、越界检测方法及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115509741A true CN115509741A (zh) | 2022-12-23 |
Family
ID=84504405
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211083836.3A Pending CN115509741A (zh) | 2022-09-06 | 2022-09-06 | 一种内存管理系统、越界检测方法及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115509741A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878405A (zh) * | 2023-03-08 | 2023-03-31 | 杭州拓数派科技发展有限公司 | PostgreSQL数据库内存检测方法和系统 |
-
2022
- 2022-09-06 CN CN202211083836.3A patent/CN115509741A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878405A (zh) * | 2023-03-08 | 2023-03-31 | 杭州拓数派科技发展有限公司 | PostgreSQL数据库内存检测方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7827375B2 (en) | Defensive heap memory management | |
KR100306456B1 (ko) | 오퍼레이팅시스템의재기동방법 | |
US8825718B2 (en) | Methods and apparatus for marking objects for garbage collection in an object-based memory system | |
US8245002B2 (en) | Call stack protection | |
US9274798B2 (en) | Multi-threaded logging | |
US20040221120A1 (en) | Defensive heap memory management | |
US20030135789A1 (en) | Method and system for instruction tracing with enhanced interrupt avoidance | |
US20120159477A1 (en) | System and method for providing direct socket i/o for java in a virtual machine | |
US9727465B2 (en) | Self-disabling working set cache | |
CN108829342B (zh) | 一种日志存储方法、系统及存储装置 | |
CN111324451A (zh) | 一种基于lte协议栈的内存块越界的定位方法及其系统 | |
CN115509741A (zh) | 一种内存管理系统、越界检测方法及存储介质 | |
CN115617504A (zh) | 一种内存管理系统、泄露检测方法及存储介质 | |
CN112433809B (zh) | 一种jvm内存管理方法、装置、设备及可读存储介质 | |
US10417121B1 (en) | Monitoring memory usage in computing devices | |
CN116302598A (zh) | 共享内存的处理方法、装置、计算机设备及存储介质 | |
CN115599542A (zh) | 一种共享内存池实现方法及系统 | |
CN113704027B (zh) | 文件聚合兼容方法、装置、计算机设备和存储介质 | |
US7299384B1 (en) | Fixing prematurely freed objects | |
CN110716923B (zh) | 数据处理方法、装置、节点设备及存储介质 | |
CN113157513B (zh) | 一种堆内存破坏检测方法、装置、电子设备及存储介质 | |
CN117056363B (zh) | 数据缓存方法、系统、设备以及存储介质 | |
CN112988610A (zh) | 内存回收处理方法、装置、计算机设备和存储介质 | |
CN117608864B (zh) | 一种多核缓存一致性方法及系统 | |
CN111881435B (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: 20240117 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 |