一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

内存释放方法、装置、电子设备及存储介质与流程

2022-09-15 06:28:08 来源:中国专利 TAG:


1.本发明涉及内存管理技术领域,具体而言,涉及一种内存释放方法、装置、电子设备及存储介质。


背景技术:

2.在应用程序运行时,应用程序会向系统申请内存的使用权限,在申请得到的内存中存储变量等数据,在应用程序不再需要这些数据时,会像系统发送内存释放请求,系统响应内存释放请求,将对应的内存释放,使得释放的内存能够被再次利用。
3.当内存没有被正确释放时,应用程序再次申请该内存,容易导致系统崩溃。因此,如何有效释放、避免系统崩溃,是亟待解决的问题。


技术实现要素:

4.本发明的目的包括,例如,提供了一种内存释放方法,其能够在响应应用程序的内存释放请求,并将相应的内存块释放之后,若确定该内存块重复释放,则将给内存块标记为重复释放内存块,以避免第一内存块被再次分配给应用程序导致内存崩溃。
5.为了实现上述目的,本发明实施例采用的技术方案如下:
6.第一方面,本发明实施例提供了一种内存释放方法,其特征在于,应用于电子设备,包括:
7.响应第一应用程序发送的内存释放请求,所述内存释放请求包括第一内存块的地址范围;
8.根据所述地址范围,确定所述第一内存块,并将所述第一内存块释放;
9.判断所述第一内存块是否重复释放;
10.若是,则将所述第一内存块标记为重复释放内存块,以避免所述第一内存块被再次分配给应用程序;
11.若否,则将所述第一内存块标记为空闲内存块。
12.在一种可能的实施方式中,所述第一内存块包括初始内存释放值,所述初始内存释放值表征所述第一内存块连续释放的次数;
13.所述判断所述第一内存块是否重复释放的步骤,包括:
14.将所述初始内存释放值加1,得到目标内存释放值;
15.若所述目标内存释放值大于预设值,则表征所述第一内存块重复释放;其中,所述预设值表征所述内存块重复释放时对应的连续释放次数;
16.若所述目标内存释放值小于或等于所述预设值,则表征所述第一内存块未重复释放。
17.在一种可能的实施方式中,所述方法还包括:
18.响应第二应用程序发送的内存分配请求,所述内存分配请求包括内存地址大小;
19.判断是否存在满足所述内存地址大小的空闲内存块;
20.若是,则在任意一个所述空闲内存块中为所述第二应用程序分配第二内存块;
21.若否,则从所有所述重复释放内存块中,确定出至少一个目标内存块,并利用预设回收算法对每个所述目标内存块均进行回收,得到每个回收内存块,以及在所有所述回收内存块中为所述第二应用程序分配所述第二内存块;
22.将所述第二内存块的初始内存释放值置为0。
23.在一种可能的实施方式中,所述电子设备预先存储有日志表,所述日志表包括每个内存块的地址范围和每个所述地址范围对应的累计释放次数;
24.所述从所有所述重复释放内存块中,确定出至少一个目标内存块的步骤,包括:
25.根据每个所述重复释放内存块的地址范围,从所述日志表中确定出每个所述重复释放内存块的累计释放次数;
26.计算所述重复释放内存块的当次释放次数阈值;
27.将每个所述累计释放次数大于1,且小于或等于所述当次释放次数阈值的重复释放内存块均作为所述目标内存块。
28.在一种可能的实施方式中,所述日志表还包括所述电子设备对重复释放内存块进行回收的历史回收次数;所述计算所述重复释放内存块的当次释放次数阈值的步骤,包括:
29.从所述日志表中获取所述历史回收次数;
30.根据所述历史回收次数和预设释放次数阈值,利用预设公式k=2^n
×
k0计算得到所述当次释放次数阈值;其中所述预设释放阈值表征所述电子设备对重复释放内存块进行第一次回收时对应的释放次数阈值;
31.其中,k为所述当次释放次数阈值,n为所述历史回收次数,k0为所述预设释放次数阈值。
32.第二方面,本发明实施例还提供了一种内存释放装置,应用于电子设备,所述内存释放装置包括:
33.响应模块,用于响应第一应用程序发送的内存释放请求,所述内存释放请求包括第一内存块的地址范围;
34.释放模块,用于根据所述地址范围,确定所述第一内存块,并将所述第一内存块释放;
35.判断模块,用于判断所述第一内存块是否重复释放;
36.标记模块,用于:
37.若是,则将所述第一内存块标记为重复释放内存块,以避免所述第一内存块被再次分配给应用程序;
38.若否,则将所述第一内存块标记为空闲内存块。
39.第三方面,本发明实施例还提供了一种电子设备,所述电子设备包括:
40.一个或多个处理器;
41.存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述的内存释放方法。
42.第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的内存释放方法。
43.相对现有技术,本发明实施例提供的一种内存释放方法、装置、电子设备及存储介
质,方法包括:响应第一应用程序发送的内存释放请求,内存释放请求包括第一内存块的地址范围;根据地址范围,确定第一内存块,并将第一内存块释放;判断第一内存块是否重复释放;若是,则将第一内存块标记为重复释放内存块,以避免第一内存块被再次分配给应用程序;若否,则将第一内存块标记为空闲内存块。由于将确定出的重复释放的内存块标记为重复释放内存块,从而避免了该内存块再次分配给应用程序而导致内存崩溃的情况。
附图说明
44.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
45.图1为本发明实施例提供的内存释放方法的一种流程示意图。
46.图2为本发明实施例提供的内存释放方法的示例图。
47.图3为本发明实施例提供的内存释放方法的另一种流程示意图。
48.图4为本发明实施例提供的内存释放装置的方框示意图。
49.图5为本发明实施例提供的电子设备的方框示意图。
50.图标:100-电子设备;101-存储器;102-处理器;103-总线;200-内存释放装置;201-响应模块;202-释放模块;203-判断模块;204-标记模块;205-分配模块。
具体实施方式
51.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
52.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
53.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
54.此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
55.需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
56.在应用程序运行时,应用程序会向系统申请内存的使用权限,在申请得到的内存中存储变量等数据,在应用程序不再需要这些数据时,会像系统发送内存释放请求,系统响应内存释放请求,将对应的内存释放,使得释放的内存能够被再次利用。
57.由于一些应用程序的代码本身存在缺陷,可能会导致一块已经被释放的内存再次进行释放,即重复释放。假设为首次释放的内存块分配一个空闲标志,则重复释放的内存块的空闲标志会累加。当该内存块再次被应用程序申请时,该内存块的仍然包括一个空闲标
志,即该内存块就是不受保护的,仍然可以被其他应用程序申请,当该内存块同时被其他应用程序申请时,会造成内存踩踏,从而导致系统的内存崩溃。
58.针对上述问题,本实施提供一种内存释放方法,在将内存块释放时候,若确定出该内存块重复释放,则将该内存块标记为重复释放内存块,以避免该内存块被再次分配给应用程序导致内存崩溃。
59.下面进行详细介绍。
60.请参考图1,图1示出了本实施例提供的内存释放方法的流程示意图,内存释放方法应用于电子设备100。该方法可以包括下述步骤s110-s150。
61.s110,响应第一应用程序发送的内存释放请求,内存释放请求包括第一内存块的地址范围。
62.在本实施例中,若内存释放请求是首次内存释放请求,则在步骤s110之前,第一应用程序还可以向系统发送内存分配请求,系统根据内存分配请求为第一应用程序分配第一内存块,此时,第一内存块的状态为已分配状态。
63.若内存释放请求不是首次释放请求,在步骤s110之前第一内存块已经被释放。
64.s120,根据地址范围,确定第一内存块,并将第一内存块释放。
65.s130,判断第一内存块是否重复释放。
66.s140,若第一内存块重复释放,则将第一内存块标记为重复释放内存块,以避免第一内存块被再次分配给应用程序。
67.s150,若第一内存块未重复释放,则将第一内存块标记为空闲内存块。
68.在本实施例中,若第一内存块重复释放,则表征该内存块在该次释放之前已经被释放,若该内存块被再次分配给应用程序,则容易造成系统内存崩溃。因此,将第一内存块标记为重复释放内存块,标记为重复释放内存块的内存块不允许被再次分配给应用程序。
69.若第一内存块未重复释放,即第一内存块为首次释放,则第一内存块允许再次本分配给应用程序。
70.相对于现有技术,本实施例提供的内存释放方法,在响应应用程序的内存释放请求,并将相应的内存块释放之后,若确定该内存块重复释放,则将给内存块标记为重复释放内存块,避免了第一内存块被再次分配给应用程序导致内存奔溃。
71.可选的,第一内存块包括初始内存释放值,初始内存释放值表征第一内存块连续释放的次数。
72.步骤s130,可以包括下述步骤s1301-s1303。
73.s1301,将初始内存释放值加1,得到目标内存释放值。
74.s1302,若目标内存释放值大于预设值,则表征第一内存块重复释放;其中,预设值表征内存块重复释放时对应的连续释放次数。
75.s1303,若目标内存释放值小于或等于预设值,则表征第一内存块未重复释放。
76.在本实施例中,预设值可以设置为2。
77.在内存块首次被应用程序申请时,系统会给内存块分配一个内存释放值,并将给内存释放值置为0。当该内存块被释放后,初始化该内存块,并将内存释放值置为1。此时该内存块允许被再次申请。
78.若该内存块再次被申请,则将内存释放值置为0;当再次被释放时,则将该内存块
标记为脏块,同时将内存释放值加1。
79.若由于应用程序发生错误,导致脏块再次被释放,则将内存释放值加1,并将内存块标记为重复释放内存块,该内存块内的任意地址不允许被应用程序申请为新的内存块。
80.下面结合一个例子对上述过程进行说明,请参考图2。
81.s1、应用程序向控制器发送内存分配请求。
82.s2、控制器为应用程序分配空闲内存块,将空闲内存块标记为已占用内存块,同时将内存释放值置0。
83.s3、应用程序使用该内存块结束时,向控制器发送内存释放请求,控制器释放该内存块,并将该内存块标记为空闲内存块,同时将内存释放值加1。
84.s4、应用程序由于代码缺陷等原因,再次向控制器发送内存释放请求,该内存释放请求指向上次释放的内存块,则控制器释放该内存块,并将内存释放值加1,同时确定该内存块重复释放,将该内存块标记为重复释放内存块。
85.可选的,在图1的基础上,请参考图3,内存释放方法还可以包括下述和步骤s110-s150并列的步骤s210-s250。
86.s210,响应第二应用程序发送的内存分配请求,内存分配请求包括内存地址大小。
87.s220,判断是否存在满足内存地址大小的空闲内存块。
88.s230,若是,则在任意一个空闲内存块中为第二应用程序分配第二内存块。
89.s240,若否,则从所有重复释放内存块中,确定出至少一个目标内存块,并利用预设回收算法对每个目标内存块均进行回收,得到每个回收内存块,以及在所有回收内存块中为第二应用程序分配第二内存块。
90.在本实施例中,确定出每个目标内存块之后,将每个目标内存块的释放次数均修改为1,并利用预设回收算法对所有释放次数为1的内存块进行回收,以对每个目标内存块进行初始化,初始化完成后的目标内存块为空闲内存块,允许被再次分配给应用程序。
91.s250,将第二内存块的初始内存释放值置为0。
92.可选的,电子设备100预先存储有日志表,日志表包括每个内存块的地址范围和每个地址范围对应的累计释放次数。
93.步骤s240中的从所有重复释放内存块中,确定出至少一个目标内存块可以包括下述子步骤s2401-s2403。
94.s2401,根据每个重复释放内存块的地址范围,从日志表中确定出每个重复释放内存块的累计释放次数。
95.在本实施例中,日志表用于记录系统对内存块的操作。包括将内存块标记为重复释放内存块的时间,每个重复释放内存块的地址范围,每个重复释放内存块的大小,每个重复释放内存块的累计释放次数,电子设备100对重复释放内存块进行回收的历史回收次数。
96.电子设备100对重复释放内存块的操作都会产生相应信息并记录至日志表中。
97.s2402,计算重复释放内存块的当次释放次数阈值。
98.在本实施例中,当次释放次数阈值表征系统在当次对重复释放内存块进行回收时对应的重复释放内存块的释放次数阈值。
99.s2403,将每个累计释放次数大于1,且小于或等于当次释放次数阈值的重复释放内存块均作为目标内存块。
100.在本实施例中,例如,若当次释放次数阈值为kn,则确定出累计释放次数属于(1,kn]的每个重复释放内存块,并将重复释放内存块作为目标内存块。
101.可选的,日志表还包括电子设备对重复释放内存块进行回收的历史回收次数。步骤s2402可以包括下述详细步骤。
102.第一步,从日志表中获取历史回收次数。
103.第二步,根据历史回收次数和预设释放次数阈值,利用预设公式k=2n×
k0计算得到当次释放次数阈值;其中预设释放阈值表征电子设备对重复释放内存块进行第一次回收时对应的释放次数阈值。
104.其中,k为当次释放次数阈值,n为历史回收次数,k0为预设释放次数阈值。
105.在本实施例中,预设释放阈值由技术人员根据经验进行设置,一般设置为3。
106.例如,在系统第一次出现可分配的空闲内存不足时,则进行第一次重复释放内存块的回收,将内存释放值属于(1,3]的重复释放内存块作为目标内存块,并将目标内存块的内存释放值设置为1,然后利用预设回收算法对所有内存释放值为1的内存块进行回收。
107.与现有技术相比,本实施例具有以下有益效果:
108.首先,本实施例提供的内存释放方法,在响应应用程序的内存释放请求,并将相应的内存块释放之后,若确定该内存块重复释放,则将给内存块标记为重复释放内存块,以避免第一内存块被再次分配给应用程序导致内存崩溃。
109.然后,本实施例为每个被申请的内存块都分配了一个内存释放值,用于记录内存块连续释放的次数,从而能够根据内存释放值判断内存块是否重复释放。
110.请参考图4,图4示出了本实施例提供的内存释放装置200的方框示意图。内存释放装置200应用于电子设备100,内存释放装置200包括:响应模块201、释放模块202、判断模块203、标记模块204和分配模块205。
111.响应模块201,用于响应第一应用程序发送的内存释放请求,内存释放请求包括第一内存块的地址范围。
112.释放模块202,用于根据地址范围,确定第一内存块,并将第一内存块释放。
113.判断模块203,用于判断第一内存块是否重复释放。
114.标记模块204,用于:
115.若第一内存块重复释放,则将第一内存块标记为重复释放内存块,以避免第一内存块被再次分配给应用程序。
116.若第一内存块未重复释放,则将第一内存块标记为空闲内存块。
117.可选的,电子设备100预先存储有日志表,日志表包括每个内存块的地址范围和每个地址范围对应的累计释放次数;第一内存块包括初始内存释放值,初始内存释放值表征第一内存块连续释放的次数。
118.判断模块203,还用于:
119.将初始内存释放值加1,得到目标内存释放值。
120.若目标内存释放值大于预设值,则表征第一内存块重复释放;其中,预设值表征内存块重复释放时对应的连续释放次数。
121.若目标内存释放值小于或等于预设值,则表征第一内存块未重复释放。
122.可选的,内存释放装置还包括分配模块。
123.响应模块201,还用于响应第二应用程序发送的内存分配请求,内存分配请求包括内存地址大小。
124.分配模块205,用于:
125.判断是否存在满足内存地址大小的空闲内存块。
126.若是,则在任意一个空闲内存块中为第二应用程序分配第二内存块。
127.若否,则从所有重复释放内存块中,确定出至少一个目标内存块,并利用预设回收算法对每个目标内存块均进行回收,得到每个回收内存块,以及在所有回收内存块中为第二应用程序分配第二内存块。
128.将第二内存块的初始内存释放值置为0。
129.可选的,分配模块205,还用于:
130.根据每个所述重复释放内存块的地址范围,从所述日志表中确定出每个所述重复释放内存块的累计释放次数。
131.计算所述重复释放内存块的当次释放次数阈值。
132.将每个所述累计释放次数大于1,且小于或等于所述当次释放次数阈值的重复释放内存块均作为所述目标内存块。
133.可选的,日志表还包括电子设备对重复释放内存块进行回收的历史回收次数。
134.分配模块205,还用于:
135.从日志表中获取历史回收次数。
136.根据历史回收次数和预设释放次数阈值,利用预设公式k=2n×
k0计算得到当次释放次数阈值;其中预设释放阈值表征电子设备对重复释放内存块进行第一次回收时对应的释放次数阈值。
137.其中,k为当次释放次数阈值,n为历史回收次数,k0为预设释放次数阈值。
138.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的内存释放装置200的具体工作过程。可以参考前述方法实施例中的对应过程,在此不再赘述。
139.请参考图5,图5示出了本实施例提供的一种电子设备100的方框示意图,电子设备100可以是,但不限于,手机、平板电脑、笔记本电脑、服务器或其它具有处理能力的电子设备,也可以是通用计算机或特殊用途的计算机。电子设备100包括存储器101、处理器102及总线103。该存储器101和处理器102通过总线103连接,例如,磁盘、rom、或ram,或其任意组合。示例性地,电子设备100还可以包括存储在rom、ram、或其他类型的非暂时性存储介质、或其任意组合中的程序指令。根据这些程序指令可以实现本发明的方法。
140.存储器101用于存储程序,例如内存释放装置200。内存释放装置200包括至少一个可以软件或固件(firmware)的形式存储于存储器101中的软件功能模块,处理器102在接收到执行指令后,执行所述程序以实现本实施例中的内存释放方法。
141.其中,存储器101可以是,但不限于,随机存取存储器(random access memory,ram),只读存储器(read only memory,rom),可编程只读存储器(programmable read-onlymemory,prom),可擦除只读存储器(erasable programmable read-only memory,eprom),电可擦除只读存储器(electric erasable programmable read-only memory,eeprom)等。
142.处理器102可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,本实
施例中的内存释放方法的各步骤可以通过处理器102中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器102可以是通用处理器,包括中央处理器(central processing unit,cpu)、微控制单元(microcontroller unit,mcu)、复杂可编程逻辑器件(complex programmable logic device,cpld)、现场可编程门阵列(field programmable gate array,fpga)、嵌入式arm等芯片。
143.为了便于说明,在电子设备100中仅描述了一个处理器。然而,应当注意,本发明中的电子设备100还可以包括多个处理器,因此本发明中描述的一个处理器执行的步骤也可以由多个处理器联合执行或单独执行。例如,若电子设备100的处理器执行步骤a和步骤b,则应该理解,步骤a和步骤b也可以由两个不同的处理器共同执行或者在一个处理器中单独执行。例如,第一处理器执行步骤a,第二处理器执行步骤b,或者第一处理器和第二处理器共同执行步骤a和b。
144.本实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器102执行时实现上述实施例揭示的内存释放方法。
145.综上所述,本发明实施例提供的一种内存释放方法、装置、电子设备及存储介质,方法包括:响应第一应用程序发送的内存释放请求,内存释放请求包括第一内存块的地址范围;根据地址范围,确定第一内存块,并将第一内存块释放;判断第一内存块是否重复释放;若是,则将第一内存块标记为重复释放内存块,以避免第一内存块被再次分配给应用程序;若否,则将第一内存块标记为空闲内存块。由于将确定出的重复释放的内存块标记为重复释放内存块,从而避免了该内存块再次分配给应用程序而导致内存崩溃的情况。
146.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献