G06F11/07 G06F11/30 G06F11/32 G06F11/36
1.一种内存异常监测方法,其特征在于,所述方法包括:
将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点;
将所述内存异常判断字符以及所述内存申请时间点加入动态内存申请列表;
获取当前时刻,并检测所述内存申请片段的所述预设位置的当前字符;
基于所述当前字符与所述内存异常判断字符之间的关系和/或当前时刻与所述内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息。
2.如权利要求1所述的内存异常监测方法,其特征在于,所述基于所述当前字符与所述内存异常判断字符之间的关系或当前时刻与所述内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息,包括:
检测所述内存申请片段中预设位置的当前字符,若所述当前字符与所述内存异常判断字符不同,则生成内存异常信息;或者,
获取当前时刻,若所述当前时刻与所述内存申请时间点的差值大于预设时间差阈值,则生成内存异常信息。
3.如权利要求1所述的内存异常监测方法,其特征在于,所述基于所述当前字符与所述内存异常判断字符之间的关系和当前时刻与所述内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息,包括:
检测所述内存申请片段中预设位置的当前字符,若所述当前字符与所述内存异常判断字符相同,则获取当前时刻,若所述当前时刻与所述内存申请时间点的差值大于预设时间差阈值,则生成内存异常信息。
4.如权利要求1所述的内存异常监测方法,其特征在于,所述基于当前字符与所述内存异常判断字符之间的关系和当前时刻与所述内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息,包括:
获取当前时刻,若所述当前时刻与所述内存申请时间点的差值小于或者等于预设时间差阈值,则检测所述内存申请片段中预设位置的当前字符,若所述当前字符与所述内存异常判断字符不同,则生成内存异常信息。
5.如权利要求1所述的内存异常监测方法,其特征在于,所述生成异常信息的步骤之后,包括:
对系统进行实时监测;
若监测到所述内存异常信息,则生成实时报警信息或者触发内存异常恢复操作。
6.如权利要求1所述的内存异常监测方法,其特征在于,所述获取当前时刻,并检测所述内存申请片段的所述预设位置的当前字符的步骤之前,包括:
若到达定时中断服务中的预设时刻,则调用定时中断服务,并将所述预设时刻作为所述当前时刻。
7.如权利要求1-4任一项所述的内存异常监测方法,其特征在于,所述将内存异常判断字符设置在内存申请片段的预设位置,包括:
将内存异常判断字符设置在内存申请片段的开始位置和/或结束位置。
8.如权利要求1所述的内存异常监测方法,其特征在于,所述内存异常判断字符至少包括一种字符类型。
9.一种内存异常检测装置,其特征在于,所述装置包括:
构建模块,用于将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点;将所述内存异常判断字符以及所述内存申请时间点加入动态内存申请列表;
数据获取模块,用于获取当前时刻,并检测所述内存申请片段的所述预设位置的当前字符;
判断模块,用于基于当前字符与所述内存异常判断字符之间的关系和/或当前时刻与所述内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息。
10.一种计算机存储介质,其特征在于,所述计算机存储介质上存储有内存异常监测方法程序,所述内存异常监测方法程序被处理器执行时实现权利要求1-8任一所述的内存异常监测方法方法的步骤。
本发明涉及内存管理领域,尤其涉及一种内存异常监测方法、装置及计算机存储介质。
内存异常通常包括内存泄露以及内存越界等。其中,串行端口的硬件把数据发送完毕后,会主动的通知系统,系统接到这个通知后,会释放占用内存。但是由于种种原因,例如蓝牙干扰,链路断开等原因,发送端口并没有成功的通知系统发送完成。这时系统就没有回收这段内存,如果在机场等干扰较严重环境,那么很容易造成系统内存耗尽而崩溃。其中,TWS耳机系统中,双耳间通信(使用蓝牙ACL链路),机盒间通信(使用串口通信),双耳与手机通信(蓝牙SPP链路通信)等很多串行通信的场景中,都可能存在内存泄漏的风险。而内存越界是软件系统主要错误之一,其后果往往不可预料且非常严重。更麻烦的是,它出现的时机是随机的,表现出来的症状是随机的,而且造成的后果也是随机的,这会使程序员很难出这些故障的现象和本质之间的联系,从而给故障定位带来极大的困难。
有鉴于此,本申请实施例提供一种内存异常监测方法、装置及计算机存储介质,旨在解决内存异常现象的监控问题。
本申请实施例提供了一种内存异常监测方法,内存异常检测方法包括:
将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点;
将内存异常判断字符以及内存申请时间点加入动态内存申请列表;
获取当前时刻,并检测内存申请片段的预设位置的当前字符;
基于当前字符与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息。
在一实施例中,基于当前字符与内存异常判断字符之间的关系或当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息,包括:
检测内存申请片段中预设位置的当前字符,若当前字符与内存异常判断字符不同,则生成内存异常信息;或者,
获取当前时刻,若当前时刻与内存申请时间点的差值大于预设时间差阈值,则生成内存异常信息。
在一实施例中,基于当前字符与内存异常判断字符之间的关系和当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息,包括:
检测内存申请片段中预设位置的当前字符,若当前字符与内存异常判断字符相同,则获取当前时刻,若当前时刻与内存申请时间点的差值大于预设时间差阈值,则生成内存异常信息。
在一实施例中,基于当前字符与内存异常判断字符之间的关系和当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息,包括:
获取当前时刻,若当前时刻与内存申请时间点的差值小于或者等于预设时间差阈值,则检测内存申请片段中预设位置的当前字符,若当前字符与内存异常判断字符不同,则生成内存异常信息。
在一实施例中,生成异常信息的步骤之后,包括:
对系统进行实时监测;
若监测到内存异常信息,则生成实时报警信息或者触发内存异常恢复操作。
在一实施例中,获取当前时刻,并检测内存申请片段的预设位置的当前字符的步骤之前,包括:
若到达定时中断服务中的预设时刻,则调用定时中断服务,并将预设时刻作为当前时刻。
在一实施例中,将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点,包括:
将内存异常判断字符设置在内存申请片段的开始位置和/或结束位置。
在一实施例中,内存异常判断字符包括至少一种字符类型。
为实现上述目的,本申请还保护一种内存异常检测装置,装置包括:
构建模块,用于将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点;将内存异常判断字符以及内存申请时间点加入动态内存申请列表;
数据获取模块,用于获取当前时刻,并检测内存申请片段的预设位置的当前字符;
判断模块,用于基于当前字符与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息。
为实现上述目的,本申请还保护一种计算机存储介质,计算机存储介质上存储有内存异常监测方法程序,内存异常监测方法程序被处理器执行时实现上述任一的内存异常监测方法方法的步骤。
本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点;将内存异常判断字符以及内存申请时间点加入动态内存申请列表;
通过在内存申请片段的预设位置设置内存异常判断字符,能够对内存泄露进行实时监测,而记录内存申请时间点则能够对内存越界进行实时监测;将内存异常判断字符以及内存申请时间点作为参考值加入动态内存申请列表进行保存,避免内存异常判断字符以及内存申请时间点被恶意程序篡改的风险,保证内存异常判断字符以及内存申请时间点的正确性,从而保证基于内存异常判断字符以及内存申请时间点判断的正确性。
获取当前时刻,并检测内存申请片段的预设位置的当前字符;基于当前字符与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息;通过利用当前时刻与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,提高了内存异常实时监测的全面性。
图1为本申请内存异常监测方法的第一实施例的流程示意图;
图2为本申请内存异常监测方法的第二实施例的流程示意图;
图3为本申请内存异常监测方法的工作流程示意图;
图4为本申请内存异常监测方法的第三实施例的流程示意图;
图5为本申请内存异常监测方法的第四实施例的流程示意图;
图6为本申请内存异常监测方法的第五实施例的流程示意图;
图7为本申请内存异常监测方法的第六实施例的流程示意图;
图8为本申请内存异常检测装置的示意图。
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例的主要解决方案是:将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点;将内存异常判断字符以及内存申请时间点加入动态内存申请列表;获取当前时刻,并检测内存申请片段的预设位置的当前字符;基于当前字符与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息;本发明解决了内存异常现象的监控及恢复的问题,实现了内存异常现象的实时监测以及恢复。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
参照图1,图1为本申请内存异常监测方法的第一实施例,方法包括:
步骤S110:将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点。
在本实施例中,内存异常检测至少包括内存泄露以及内存越界,但并不限定于上述内存异常检测,也可以是其他的内存异常检测。具体地,内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。通常在嵌入式系统开发中,为了高效重复利用内存资源,系统中会有一段公共的内存,可以理解成一段公共的内存银行,应用需要时向系统申请借用,并登记内存的起始地址和借用大小,用完后需要及时归还,以便其他应用再次重复使用。如果各个应用只借用不归还,那可用的空间会越来越少,这就是内存泄露。作为一种不恰当的内存操作,不仅有可能破坏到程序中的数据存取逻辑,严重的时候还可能对其它正在运行的程序甚至整个系统造成影响,使产品失去应有的功能。而且内存泄露一般出现的问题都没有什么规律,在问题出现一段时间后才会表现出来,排查起来很困难。另外,内存越界是指当内存输入超出了预分配的空间大小,就会覆盖该预分配的空间之后的一段存储区域,导致系统异常。
具体地,内存异常判断字符可以是用于判断内存是否存在异常现象的字符或者字符组合,尤其可以用来判断内存越界的内存异常现象。其中,将内存异常判断字符设置在内存申请片段的不同位置,可以监测不同的内存异常现象。内存申请时间点可以是用于判断关于时限的内存异常现象的数据。其中,动态内存的申请可以使用malloc函数完成,malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小。
步骤S120:将内存异常判断字符以及内存申请时间点加入动态内存申请列表。
具体地,动态内存申请列表可以是记录每条内存申请的内存属性;其中,动态内存申请列表至少包括申请时间点以及内存异常判断字符,还可以包括内存申请片段的起始地址以及申请长度。其中,内存异常判断字符以及内存申请时间点作为内存异常的判断参考值。
步骤S130:获取当前时刻,并检测内存申请片段的预设位置的当前字符。
具体地,实时获取当前时刻以及内存申请片段的预设位置的当前字符,并将当前时刻以及内存申请片段的预设位置的当前字符作为对比值与内存申请时间点以及内存异常判断字符进行对比判断。
步骤S140:基于当前字符与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息。
通过判断对比值与参考值之间的关系,生成内存异常信息;也就是通过判断当前字符与内存异常判断字符之间的关系,或者当前时刻与内存申请时间点之间的关系,或者当前字符与内存异常判断字符之间的关系以及当前时刻与内存申请时间点之间的关系,进行判断,若满足预设条件,则生成内存异常信息。
在本实施例中,将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点;将内存异常判断字符以及内存申请时间点加入动态内存申请列表;通过在内存申请片段的预设位置设置内存异常判断字符,能够对内存泄露进行实时监测,而记录内存申请时间点则能够对内存越界进行实时监测;将内存异常判断字符以及内存申请时间点作为参考值加入动态内存申请列表进行保存,避免内存异常判断字符以及内存申请时间点被恶意程序篡改的风险,保证内存异常判断字符以及内存申请时间点的正确性,从而保证基于内存异常判断字符以及内存申请时间点判断的正确性。
获取当前时刻,并检测内存申请片段的预设位置的当前字符;基于当前字符与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息;通过利用当前时刻与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,提高了内存异常实时监测的全面性。
参照图2,图2为本申请内存异常监测方法的第二实施例,该方法,包括:
步骤S210:将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点。
步骤S220:将内存异常判断字符以及内存申请时间点加入动态内存申请列表。
步骤S230:获取当前时刻,并检测内存申请片段的预设位置的当前字符。
步骤S240:检测内存申请片段中预设位置的当前字符,若当前字符与内存异常判断字符不同,则生成内存异常信息;或者,
获取当前时刻,若当前时刻与内存申请时间点的差值大于预设时间差阈值,则生成内存异常信息。
在本实施例中,可以针对内存申请时间点或者内存异常判断字符进行判断。若当前字符与内存异常判断字符不同,比如当前字符为ab,而内存异常判断字符为1!,当两者存在不同时,则说明出现内存异常现象,则可以生成内存异常信息。
也可以利用内存时限对内存异常现象进行判断,若当前时刻与内存申请时间点的差值大于预设时间差阈值,说明该内存申请片段超过预设时间阈值但仍未及时规划,则存在内存异常现象,生成内存异常信息。
需要另外说明的是,检测内存申请片段中预设位置的当前字符,若当前字符与内存异常判断字符不同,则生成内存异常信息,可以是对内存异常现象中的内存越界现象进行判断,则在生成的内存异常信息中可以包含内存越界的原因限定,更有助于用户更快的解决以及恢复内存异常的现象。
获取当前时刻,若当前时刻与内存申请时间点的差值大于预设时间差阈值,则生成内存异常信息,可以是对内存异常现象中的内存泄露现象进行判断,则在生成的内存异常信息中可以包含内存泄露的原因限定,更有助于用户更快的解决以及恢复内存异常的现象,保持系统顺利运行。
需要另外说明的是,在生成内存异常信息后,说明系统异常,已无法主动释放该内存块,则自动执行free函数,释放对应的动态内存申请列表,及时清除该内存。
第二实施例与第一实施例相比,包括步骤S240,其他步骤在第一实施例中已经进行了阐述,在此不再赘述。
在本实施例中,利用当前字符与内存异常判断字符之间的关系或者当前时刻与内存申请时间点之间的关系对是否存在内存异常进行判断,因判断的对比值为当前字符以及当前时刻,保证了内存异常检测的实时性,从而保证内存异常现象能够及时处理。
参照图3所示为本申请内存异常监测方法的工作流程图,图3中有三个的动态内存申请列表,列表中的信息包括起始地址,申请长度,内存申请时间点以及内存异常判断字符,其中,需要另外说明的是,内存申请时间点可以是申请内存时记录的当时滴答时钟值。
参照图4,图4为本申请内存异常监测方法的第三实施例,该方法,包括:
步骤S310:将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点。
步骤S320:将内存异常判断字符以及内存申请时间点加入动态内存申请列表。
步骤S330:获取当前时刻,并检测内存申请片段的预设位置的当前字符。
步骤S340:检测内存申请片段中预设位置的当前字符,若当前字符与内存异常判断字符相同,则获取当前时刻,若当前时刻与内存申请时间点的差值大于预设时间差阈值,则生成内存异常信息。
第三实施例与第一实施例相比,包括步骤S340,其他步骤在第一实施例中已经进行了阐述,在此不再赘述。
在本实施例中,结合内存申请时间点以及内存异常判断字符对是否存在内存异常现象进行判断,首先检测当前字符与内存异常判断字符之间的关系,若当前字符与内存异常判断字符相同,然后再利用当前时刻与内存申请时间点之间的关系对是否存在内存异常现象进行判断,若当前时刻与内存申请时间点的差值大于预设时间差阈值,则生成内存异常信息。
需要另外说明的是,在本实施例中,若当前字符与内存异常判断字符不相同,则直接生成内存异常信息。
在本实施例中,结合内存申请时间点以及内存异常判断字符对是否存在内存异常现象进行判断,并同时判断内存异常现象并非内存越界,而是内存泄露,进一步保证对内存异常现象判断的准确性。
参照图5,图5为本申请内存异常监测方法的第四实施例,该方法,包括:
步骤S410:将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点。
步骤S420:将内存异常判断字符以及内存申请时间点加入动态内存申请列表。
步骤S430:获取当前时刻,并检测内存申请片段的预设位置的当前字符。
步骤S440:获取当前时刻,若当前时刻与内存申请时间点的差值小于或者等于预设时间差阈值,则检测内存申请片段中预设位置的当前字符,若当前字符与内存异常判断字符不同,则生成内存异常信息。
第四实施例与第一实施例相比,包括步骤S440,其他步骤在第一实施例中已经进行了阐述,在此不再赘述。
在本实施例中,结合内存申请时间点以及内存异常判断字符对是否存在内存异常现象进行判断,首先判断当前时刻与内存申请时间点的差值与预设时间差阈值的关系,若当前时刻与内存申请时间点的差值小于或者等于预设时间差阈值,然后再利用当前字符与内存异常判断字符之间的关系对是否存在内存异常现象进行判断,若当前字符与内存异常判断字符不同,则生成内存异常信息。
需要另外说明的是,若当前时刻与内存申请时间点的差值大于预设时间差阈值,则直接生成内存异常信息。
在本实施例中,结合内存申请时间点以及内存异常判断字符对是否存在内存异常现象进行判断,并同时准确判断内存异常现象并非内存泄露,而是内存越界,进一步保证对内存异常现象判断的准确性。
参照图6,图6为本申请内存异常监测方法的第五实施例,该方法,包括:
步骤S510:将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点。
步骤S520:将内存异常判断字符以及内存申请时间点加入动态内存申请列表。
步骤S530:获取当前时刻,并检测内存申请片段的预设位置的当前字符。
步骤S540:基于当前字符与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息。
步骤S550:对系统进行实时监测。
具体地,可以利用监听进程对系统进行实时监测。
步骤S560:若监测到内存异常信息,则生成实时报警信息或者触发内存异常恢复操作。
具体地,生成实时报警信息可以是通过系统产生一个报警信息用于通知用户,并及时进行处理;而触发内存异常恢复操作可以是通过主动调用预设的异常恢复函数,用户可以在异常恢复函数中预设恢复逻辑,报错等动作。
在本实施例中,通过对系统的实时监测,若监测到内存异常信息,则生成实时报警信息或者触发异常恢复操作,保证用户能够及时发现内存异常现象,并及时进行恢复处理,从而保证内存异常现象及时恢复。
参照图7,图7为本申请内存异常监测方法的第六实施例,该方法,包括:
步骤S610:将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点。
步骤S620:将内存异常判断字符以及内存申请时间点加入动态内存申请列表。
步骤S630:若到达定时中断服务中的预设时刻,则调用定时中断服务,并将预设时刻作为当前时刻;
具体地,中断服务可以是一种中断服务程序,用于处理器处理“急件”,是通过执行事先编好的某个特定的程序来完成的。
具体地,到达定时中断服务中的预设时刻,可以是按照滴答时钟周期计算,其中,滴答时钟类似于一个递增的沙漏,系统启动就会随时钟递增计数。比如,当到达滴答时钟周期第一个周期结束时,则调用定期中断服务,并将第一个周期结束时刻作为当前时刻,接着当到达滴答时钟周期第二个周期结束时,则调用定期中断服务,并将第二个周期结束时刻作为当前时刻,以此类推。
步骤S640:获取当前时刻,并检测内存申请片段的预设位置的当前字符。
步骤S650:基于当前字符与内存异常判断字符之间的关系和/或当前时刻与内存申请时间点之间的关系进行判断,若满足预设条件,则生成内存异常信息。
在本实施例中,通过利用定时中断服务,周期性的准确获取当前时刻,保证当前时刻获取的正确性,从而保证当前时刻与内存申请点之间的关系判断的正确性,进一步保证内存泄露异常现象的及时发现。
在一实施例中,将内存异常判断字符设置在内存申请片段的预设位置,并记录内存申请时间点,包括:
将内存异常判断字符设置在内存申请片段的开始位置和/或结束位置。
具体地,将内存异常判断字符设置在内存申请片段的开始位置,可以监测到其他程序是否占用自身的内存引起的内存越界现象;而将内存异常判断字符设置在内存申请片段的结束位置,可以检测到自身的内存越界现象;而将内存异常判断字符设置在内存申请片段的开始位置以及结束位置,则可以对上述两种内存越界现象同时进行监测。
在本实施例中,通过在内存申请片段的不同位置设置内存异常判断字符,对不同类型的内存越界异常进行准确监控,保证对系统中的内存异常实时检测。
在一实施例中,内存异常判断字符至少包括一种字符类型。
具体地,在本实施例中,内存异常判断字符可以是一种字符类型,可以是数字类型,或者字母类型,或者特殊符号类型;也可以是两种以上的数字类型,字母类型以及特殊符号类型的组合,比如11,aa,!
本文发布于:2023-04-13 10:05:15,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/1/86422.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |