CN105302738B - 一种内存分配方法及装置 - Google Patents

一种内存分配方法及装置 Download PDF

Info

Publication number
CN105302738B
CN105302738B CN201510906621.0A CN201510906621A CN105302738B CN 105302738 B CN105302738 B CN 105302738B CN 201510906621 A CN201510906621 A CN 201510906621A CN 105302738 B CN105302738 B CN 105302738B
Authority
CN
China
Prior art keywords
memory
memory block
storage allocation
goal task
size
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.)
Active
Application number
CN201510906621.0A
Other languages
English (en)
Other versions
CN105302738A (zh
Inventor
汤渊清
肖剑
朱严峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kyland Technology Co Ltd
Original Assignee
Kyland Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Kyland Technology Co Ltd filed Critical Kyland Technology Co Ltd
Priority to CN201510906621.0A priority Critical patent/CN105302738B/zh
Publication of CN105302738A publication Critical patent/CN105302738A/zh
Application granted granted Critical
Publication of CN105302738B publication Critical patent/CN105302738B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Memory System (AREA)

Abstract

本发明实施例公开了一种内存分配方法及装置。一种内存分配方法,包括以下步骤:接收目标任务的内存申请;根据所述申请内存大小,确定分配内存大小;确定第一内存池中是否存在满足所述分配内存大小的空闲内存块;如果存在,在所述第一内存池中为所述目标任务分配所述分配内存大小的内存块;否则,在所述目标任务的优先级高于预设的优先级阈值的情况下,在预先保留的第二内存池中为所述目标任务分配所述分配内存大小的内存块。应用本发明实施例所提供的技术方案,当第一内存池中内存耗尽时,系统可以将预先保留的内存分配给优先级较高的关键任务,保证系统的基本管理能力以及诊断能力,提高系统的安全性和可靠性。

Description

一种内存分配方法及装置
技术领域
本发明涉及计算机技术领域,特别涉及一种内存分配方法及装置。
背景技术
在实时操作系统中,如在vxWorks操作系统中,通常采用动态内存管理机制,操作系统将内存分配给有内存需求的任务,任务完成后,再将内存释放,以供操作系统继续将内存分配给有内存需求的其他任务。
现有技术中,所有任务的内存申请都是平等的,操作系统维护一个内存资源池,只要接收到内存申请,即将内存资源池中与申请的大小一致的内存块分配给相应的任务。
这种方法存在一定的问题,如果某个任务存在不正常的内存申请导致内存耗尽时,操作系统无法再给有内存需求的其他任务分配内存,也就是说,在这种情况下,所有有内存需求的任务都将受到波及,进而导致操作系统崩溃,影响操作系统的安全性和可靠性。
发明内容
本发明实施例的目的在于提供一种内存分配方法及装置,以提高操作系统的安全性和可靠性。技术方案如下:
一种内存分配方法,包括:
接收目标任务的内存申请,其中,所述内存申请中携带所述目标任务的申请内存大小的信息;
根据所述申请内存大小,确定分配内存大小;
确定第一内存池中是否存在满足所述分配内存大小的空闲内存块;
如果存在,则在所述第一内存池中为所述目标任务分配所述分配内存大小的内存块;
否则,在所述目标任务的优先级高于预设的优先级阈值的情况下,在预先保留的第二内存池中为所述目标任务分配所述分配内存大小的内存块。
在本发明的一种具体实施方式中,所述在所述第一内存池中为所述目标任务分配所述分配内存大小的内存块,包括:
在所述第一内存池中包含多个满足所述分配内存大小的空闲内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
在本发明的一种具体实施方式中,所述在预先保留的第二内存池中为所述目标任务分配所述分配内存大小的内存块,包括:
在预先保留的第二内存池中包含多个满足所述分配内存大小的内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
在本发明的一种具体实施方式中,在所述为所述目标任务分配所述分配内存大小的内存块之后,所述方法还包括:
记录分配给所述目标任务的内存块的地址信息及所述目标任务的标识信息。
在本发明的一种具体实施方式中,所述地址信息包含地址边界标识信息,所述方法还包括:
在检测到有内存释放时,识别释放的内存块的地址边界标识信息及释放内存的目标任务的标识信息;
判断释放的内存块的地址边界标识信息与记录的所述目标任务的地址边界标识信息是否一致;
如果不一致,则确定所述目标任务被分配的内存被改写。
一种内存分配装置,包括:
内存申请接收模块,用于接收目标任务的内存申请,其中,所述内存申请中携带所述目标任务的申请内存大小的信息;
分配内存大小确定模块,用于根据所述申请内存大小,确定分配内存大小;
空闲内存块确定模块,用于确定第一内存池中是否存在满足所述分配内存大小的空闲内存块,如果存在,则触发第一分配模块,否则,触发第二分配模块;
所述第一分配模块,用于在所述第一内存池中为所述目标任务分配所述分配内存大小的内存块;
所述第二分配模块,用于在所述目标任务的优先级高于预设的优先级阈值的情况下,在预先保留的第二内存池中为所述目标任务分配所述分配内存大小的内存块。
在本发明的一种具体实施方式中,所述第一分配模块,具体用于:
在所述第一内存池中包含多个满足所述分配内存大小的空闲内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
在本发明的一种具体实施方式中,所述第二分配模块,具体用于:
在预先保留的第二内存池中包含多个满足所述分配内存大小的内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
在本发明的一种具体实施方式中,所述装置还包括:
记录模块,用于在所述为所述目标任务分配所述分配内存大小的内存块之后,记录分配给所述目标任务的内存块的地址信息及所述目标任务的标识信息。
在本发明的一种具体实施方式中,所述地址信息包含地址边界标识信息,所述装置还包括内存改写确定模块,用于:
在检测到有内存释放时,识别释放的内存块的地址边界标识信息及释放内存的目标任务的标识信息;
判断释放的内存块的地址边界标识信息与记录的所述目标任务的地址边界标识信息是否一致;
如果不一致,则确定所述目标任务被分配的内存被改写。
应用本发明实施例所提供的技术方案,系统接收到目标任务的内存申请后,可以根据申请内存大小,确定分配内存大小,然后确定第一内存池中是否存在满足分配内存大小的内存块,如果存在,则在第一内存池中进行内存分配,如果不存在,则在目标任务的优先级大于预设优先级阈值时,在预先保留的第二内存池中进行内存分配。这样,当第一内存池中内存耗尽时,系统可以将预先保留的内存分配给优先级较高的关键任务,保证系统的基本管理能力以及诊断能力,提高系统的安全性和可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中一种内存分配方法的实施流程图;
图2为本发明实施例中一种内存分配装置的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本发明实施例中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例所提供的一种内存分配方法可以应用于实时操作系统中。在本发明实施例的描述中,将实时操作系统称为系统。当某个任务有内存需求时,可以向系统发出内存申请,系统通过本发明实施例所提供的技术方案为该任务分配与其申请内存大小对应的分配内存大小的内存块。
参见图1所示,为本发明实施例所提供的一种内存分配方法的实施流程图,该方法可以包括以下步骤:
S110:接收目标任务的内存申请。
其中,所述内存申请中携带所述目标任务的申请内存大小的信息。
在本发明实施例中,目标任务可以是系统中任意一个有内存需求的任务。目标任务可以根据自身的任务需求,确定要申请多大的内存,并向系统发出内存申请,在内存申请中携带申请内存大小的信息。系统接收到目标任务的内存申请后,可以继续执行步骤S120的操作。
S120:根据所述申请内存大小,确定分配内存大小。
在实际应用中,系统接收到目标任务的内存申请后,可以根据申请内存大小,确定分配内存大小。
具体的,系统可以直接将申请内存大小确定为分配内存大小,即目标任务要申请多少内存就为其分配多少内存。
但是,因为系统在为目标任务分配内存时,需要在分配的内存块中添加一些维护信息,比如目标任务信息、地址边界标识信息等,这些信息需要占用一定大小的内存,所以,系统确定的分配内存大小可以为申请内存大小加上用于存储维护信息的内存大小,该用于存储维护信息的内存大小及在内存块中的位置可以根据实际情况进行设置和调整,本发明实施例对此不做限制。
S130:确定第一内存池中是否存在满足所述分配内存大小的空闲内存块,如果存在,则执行步骤S140,否则,执行步骤S150。
在本发明实施例中,第一内存池为系统在进行常规内存分配时所使用的内存池,该第一内存池中可以包含一个或多个空闲内存块,每个空闲内存块是一段连续的内存地址范围,各个空闲内存块的大小可能不同。第一内存池中包含的各空闲内存块的地址空间并不连续。当系统接收到目标任务的内存申请时,优先在该第一内存池包含的空闲内存块中为目标任务分配相应的内存块。
可以理解的是,系统要分配给目标任务的内存块需要是一个具有连续内存地址范围的内存块,所以,对于空闲内存块而言,需要其大小大于或等于分配内存大小。即对于第一内存池中包含的每个空闲内存块而言,如果该空闲内存块的大小大于或等于分配内存大小,则可以认为该空闲内存块为满足分配内存大小的内存块,系统在为目标任务分配内存时可以加以考虑,如果该空闲内存块的大小小于分配内存大小,则可以认为该空闲内存块不是满足分配内存大小的内存块,系统在为目标任务分配内存时不加以考虑。
系统确定出分配内存大小后,根据该分配内存大小的信息及第一内存池中包含的空闲内存块的大小的信息,可以确定第一内存池中是否存在满足该分配内存大小的空闲内存块。
比如,第一内存池中包含空闲内存块A、空闲内存块B、空闲内存块C和空闲内存块D。如果空闲内存块A和空闲内存块C的大小均大于或等于分配内存大小,则可以确定空闲内存块A和空闲内存块C为满足分配内存大小的内存块,也即第一内存池中存在满足分配内存大小的空闲内存块。如果空闲内存块A、空闲内存块B、空闲内存块C和空闲内存块D的大小均小于分配内存大小,则可以确定第一内存池中不存在满足分配内存大小的空闲内存块。
如果系统确认第一内存池中存在满足分配内存大小的空闲内存块,则可以继续执行步骤S140的操作,否则,执行步骤S150的操作。
S140:在所述第一内存池中为所述目标任务分配所述分配内存大小的内存块。
在步骤S130,如果系统确认第一内存池中存在满足分配内存大小的空闲内存块,则系统可以直接在第一内存池中为目标任务分配该分配内存大小的内存块。
在实际应用中,如果第一内存池中只包含一个满足分配内存大小的空闲内存块,则系统可以直接在该空闲内存块中截取分配内存大小的内存块,并将该内存块分配给目标任务;如果第一内存池中包含多个满足分配内存大小的空闲内存块,则系统可以在这多个空闲内存块中,随机或者按照预设的选取规则选择一个空闲内存块,在该空闲内存块中截取分配内存大小的内存块,并将该内存块分配给目标任务。
在本发明的一种具体实施方式中,步骤S140可以包括以下步骤:
步骤一:在所述第一内存池中包含多个满足所述分配内存大小的空闲内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
步骤二:识别差值最小的空闲内存块;
步骤三:在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
为便于描述,将上述三个步骤结合起来进行说明。
在第一内存池中包含多个满足分配内存大小的空闲内存块的情况下,系统可以先确定出满足分配内存大小的每个空闲内存块的大小与分配内存大小的差值,然后识别出差值最小的空闲内存块,从该空闲内存块中截取分配内存大小的内存块,将该内存块分配给目标任务。
比如,第一内存池中包含空闲内存块A、空闲内存块B、空闲内存块C和空闲内存块D。其中,空闲内存块A和空闲内存块C的大小均大于或等于目标任务的分配内存大小,即空闲内存块A和空闲内存块C为满足分配内存大小的内存块,且空闲内存块A的大小与分配内存大小的差值小于空闲内存块C与分配内存大小的差值,系统可以在空闲内存块A中截取分配内存大小的内存块,将该内存块分配给目标任务。
在本发明实施例中,为了在接收到目标任务的内存申请时提高内存块的搜索效率,系统可以采用二叉树结构保存第一内存池中包含的空闲内存块的信息,这样,在不牺牲内存使用效率的情况下可以提高内存管理的时间性能。
在满足分配内存大小的空闲内存块中,选择大小与申请内存大小的差值最小的空闲内存块,并从该空闲内存块中截取分配内存大小的内存块,将该内存块分配给目标任务,可以减少内存碎片的发生,达到内存利用的最大化。
S150:在所述目标任务的优先级高于预设的优先级阈值的情况下,在预先保留的第二内存池中为所述目标任务分配所述分配内存大小的内存块。
在实际应用中,如果系统将所有空闲内存块均放入同一内存池中进行内存分配,当系统中某个任务存在不正常的内存申请导致内存耗尽时,所有有内存需求的任务都将受到波及,导致系统崩溃。所以,在本发明实施例中,在系统建立之初,可以将可分配的内存分为两部分,第一部分内存在常规内存申请时使用,放入第一内存池中,第二部分内存预先保留起来,在常规内存申请失败时可以使用,放入第二内存池中。在实际设置时,可以设置第一部分内存的大小可以大于第二部分内存的大小。
为保障系统基本的管理能力以及诊断能力,第二内存池中的空闲内存块可以只分配给一些能够保障系统基本的管理能力及诊断能力的任务,如远程终端协议(Telnet)任务、控制台(Console)任务等。
在实际应用中,系统可以预先设置任务属性与优先级的对应关系,比如,设置保障系统基本的管理能力的任务属性与高优先级对应,设置保障系统的诊断能力的任务属性与中优先级对应,设置其他任务属性与低优先级对应。优先级的等级不局限于上述例举的几种,可以有多种,本发明实施例对此不做限制。
当系统接收到目标任务的内存申请,确定第一内存池中不存在满足分配内存大小的空闲内存块时,可以先根据目标任务的任务属性,确定目标任务的优先级,并在目标任务的优先级高于预设的优先级阈值的情况下,在第二内存池中为目标任务分配该分配内存大小的内存块。
优先级阈值可以根据实际情况进行设置和调整,比如设置为低优先级,本发明实施例对此不做限制。以优先级阈值为低优先级为例,当目标任务的优先级高于低优先级,即目标任务的优先级为高优先级或中优先级时,系统可以在第二内存池中为目标任务分配该分配内存大小的内存块。
在实际应用中,如果第二内存池中只包含一个满足分配内存大小的空闲内存块,则系统需要在该空闲内存块中截取分配内存大小的内存块,并将该内存块分配给目标任务;如果第二内存池中包含多个满足分配内存大小的空闲内存块,则系统可以在这多个空闲内存块中,随机或者按照预设的选取规则选择一个空闲内存块,在该空闲内存块中截取分配内存大小的内存块,并将该内存块分配给目标任务。
在本发明的一种具体实施方式中,步骤S150可以包括以下步骤:
第一个步骤:在预先保留的第二内存池中包含多个满足所述分配内存大小的内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述申请内存大小的差值;
第二个步骤:识别差值最小的空闲内存块;
第三个步骤:在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
为便于描述,将上述三个步骤结合起来进行说明。
在第二内存池中包含多个满足分配内存大小的空闲内存块的情况下,系统可以先确定出满足分配内存大小的每个空闲内存块的大小与分配内存大小的差值,然后识别出差值最小的空闲内存块,从该空闲内存块中截取分配内存大小的内存块,将该内存块分配给目标任务。
在本发明实施例中,为了在接收到目标任务的内存申请时提高内存块的搜索效率,系统可以采用二叉树结构保存第二内存池中包含的空闲内存块的信息,这样,在不牺牲内存使用效率的情况下可以提高内存管理的时间性能。
在满足分配内存大小的空闲内存块中,选择大小与分配内存大小的差值最小的空闲内存块,并从该空闲内存块中截取分配内存大小的内存块,将该内存块分配给目标任务,可以减少内存碎片的发生,达到内存利用的最大化。
应用本发明实施例所提供的技术方案,系统接收到目标任务的内存申请后,可以根据申请内存大小,确定分配内存大小,然后确定第一内存池中是否存在满足分配内存大小的内存块,如果存在,则在第一内存池中进行内存分配,如果不存在,则在目标任务的优先级大于预设优先级阈值时,在预先保留的第二内存池中进行内存分配。这样,当第一内存池中内存耗尽时,系统可以将预先保留的内存分配给优先级较高的关键任务,保证系统的基本管理能力以及诊断能力,提高系统的安全性和可靠性。
在本发明的一个实施例中,在步骤S140或步骤S150为目标任务分配该分配内存大小的内存块之后,该方法还可以包括以下步骤:
记录分配给所述目标任务的内存块的地址信息及所述目标任务的标识信息。
目标任务的标识信息可以包括目标任务的名称信息、目标任务所在文件的文件名称信息、目标任务所在文件的行号信息等,这些信息也可称为内存申请者信息。
在将分配内存大小的内存块分配给目标任务之后,系统可以记录目标任务的标识信息,并将不同时刻的这些信息做比对,可以直观、准确地定位到内存泄露的源头。从而系统开发人员可以根据该内存泄露信息,分析内存泄露产生过程,完善系统功能。
在将分配内存大小的内存块分配给目标任务之后,系统还可以记录分配给目标任务的内存块的地址信息,内存块的地址信息可以是内存块的起始地址信息、终止地址信息、内存块的大小信息等,还可以是地址边界标识信息。
在实际应用中,系统将分配内存大小的内存块分配给目标任务时,可以根据该内存块的边界在其所在内存池中的存储位置,确定该内存块的地址边界标识信息,并记录该地址边界标识信息。在这种情况下,系统分配给不同任务的内存块的地址边界标识信息是不同的。
系统将分配内存大小的内存块分配给目标任务时,还可以将预设的地址边界标识信息添加到用于存储维护信息的内存中,并记录该地址边界标识信息。针对于每一个要分配出去的内存块,系统可以设置不同的地址边界标识信息,还可以设置相同的地址边界标识信息。相对应的,记录的每个分配出去的内存块的地址边界标识信息可以相同可以不同。
在本发明的一个实施例中,所述地址信息包含地址边界标识信息,该方法还可以包括以下步骤:
步骤一:在检测到有内存释放时,识别释放的内存块的地址边界标识信息及释放内存的目标任务的标识信息;
步骤二:判断释放的内存块的地址边界标识信息与记录的所述目标任务的地址边界标识信息是否一致,如果不一致,则执行步骤三,否则,不做处理;
步骤三:确定所述目标任务被分配的内存与其他目标任务被分配的内存重叠。
为便于描述,将上述三个步骤结合起来进行说明。
系统在为每个目标任务分配相应的内存块时,记录了每个目标任务的标识信息和分配给每个目标任务的内存块的地址边界标识信息。记录的地址边界标识信息可以相同可以不同。
如果记录的不同任务的内存块的地址边界标识信息相同,则当系统检测到有内存释放时,可以直接判断释放的内存块的地址边界标识信息与记录的该地址边界标识信息是否一致。
如果记录的不同任务的内存块的地址边界标识信息不同,则当系统检测到有内存释放时,可以根据识别到的释放内存的目标任务的标识信息,在记录的信息中查找该目标任务的地址边界标识信息,并判断该地址边界标识信息与释放的内存块的地址边界标识信息是否一致。
无论在上述哪种情况下,如果释放的内存块的地址边界标识信息与记录的目标任务的地址边界标识信息不一致,则可以确定该目标任务被分配的内存被改写,系统开发人员可以针对该内存被改写问题,对系统进行进一步的维护和调整。
通过在分配内存时记录分配给目标任务的内存块的地址边界标识信息,在内存释放时检测该地址边界标识信息是否发生变化,可以以很小代价对系统中的踩内存问题进行监测。
相应于上面的方法实施例,本发明实施例还提供了一种内存分配装置,参见图2所示,该装置可以包括:
内存申请接收模块210,用于接收目标任务的内存申请,其中,所述内存申请中携带所述目标任务的申请内存大小的信息;
分配内存大小确定模块220,用于根据所述申请内存大小,确定分配内存大小;
空闲内存块确定模块230,用于确定第一内存池中是否存在满足所述分配内存大小的空闲内存块,如果存在,则触发第一分配模块240,否则,触发第二分配模块250;
所述第一分配模块240,用于在所述第一内存池中为所述目标任务分配所述分配内存大小的内存块;
所述第二分配模块250,用于在所述目标任务的优先级高于预设的优先级阈值的情况下,在预先保留的第二内存池中为所述目标任务分配所述分配内存大小的内存块。
应用本发明实施例所提供的装置,系统接收到目标任务的内存申请后,可以根据申请内存大小,确定分配内存大小,然后确定第一内存池中是否存在满足分配内存大小的内存块,如果存在,则在第一内存池中进行内存分配,如果不存在,则在目标任务的优先级大于预设优先级阈值时,在预先保留的第二内存池中进行内存分配。这样,当第一内存池中内存耗尽时,系统可以将预先保留的内存分配给优先级较高的关键任务,保证系统的基本管理能力以及诊断能力,提高系统的安全性和可靠性。
在本发明的一种具体实施方式中,所述第一分配模块240,可以具体用于:
在所述第一内存池中包含多个满足所述分配内存大小的空闲内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
在本发明的一种具体实施方式中,所述第二分配模块250,可以具体用于:
在预先保留的第二内存池中包含多个满足所述分配内存大小的内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
在本发明的一种具体实施方式中,所述装置还可以包括:
记录模块,用于在所述为所述目标任务分配所述分配内存大小的内存块之后,记录分配给所述目标任务的内存块的地址信息及所述目标任务的标识信息。
在本发明的一种具体实施方式中,所述地址信息包含地址边界标识信息,所述装置还可以包括内存改写确定模块,用于:
在检测到有内存释放时,识别释放的内存块的地址边界标识信息及释放内存的目标任务的标识信息;
判断释放的内存块的地址边界标识信息与记录的所述目标任务的地址边界标识信息是否一致;
如果不一致,则确定所述目标任务被分配的内存被改写。
在本发明的一种具体实施方式中,采用二叉树结构保存所述第一内存池中包含的空闲内存块的信息,和/或采用二叉树结构保存所述第二内存池中包含的空闲内存块的信息。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (6)

1.一种内存分配方法,其特征在于,包括:
接收目标任务的内存申请,其中,所述内存申请中携带所述目标任务的申请内存大小的信息;
根据所述申请内存大小,确定分配内存大小;
确定第一内存池中是否存在满足所述分配内存大小的空闲内存块;
如果存在,则在所述第一内存池中为所述目标任务分配所述分配内存大小的内存块;
否则,在所述目标任务的优先级高于预设的优先级阈值的情况下,在预先保留的第二内存池中为所述目标任务分配所述分配内存大小的内存块;
在为所述目标任务分配所述分配内存大小的内存块之后,所述方法还包括:
记录分配给所述目标任务的内存块的地址信息及所述目标任务的标识信息,其中,所述标识信息包括:目标任务的名称信息、目标任务所在文件的文件名称信息、目标任务所在文件的行号信息,所述地址信息包括:内存块的起始地址信息、内存块的终止地址信息、内存块的大小信息、地址边界标识信息;
在检测到有内存释放时,识别释放的内存块的地址边界标识信息及释放内存的目标任务的标识信息;
判断释放的内存块的地址边界标识信息与记录的所述目标任务的地址边界标识信息是否一致;
如果不一致,则确定所述目标任务被分配的内存被改写。
2.根据权利要求1所述的方法,其特征在于,所述在所述第一内存池中为所述目标任务分配所述分配内存大小的内存块,包括:
在所述第一内存池中包含多个满足所述分配内存大小的空闲内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
3.根据权利要求1所述的方法,其特征在于,所述在预先保留的第二内存池中为所述目标任务分配所述分配内存大小的内存块,包括:
在预先保留的第二内存池中包含多个满足所述分配内存大小的内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
4.一种内存分配装置,其特征在于,包括:
内存申请接收模块,用于接收目标任务的内存申请,其中,所述内存申请中携带所述目标任务的申请内存大小的信息;
分配内存大小确定模块,用于根据所述申请内存大小,确定分配内存大小;
空闲内存块确定模块,用于确定第一内存池中是否存在满足所述分配内存大小的空闲内存块,如果存在,则触发第一分配模块,否则,触发第二分配模块;
所述第一分配模块,用于在所述第一内存池中为所述目标任务分配所述分配内存大小的内存块;
所述第二分配模块,用于在所述目标任务的优先级高于预设的优先级阈值的情况下,在预先保留的第二内存池中为所述目标任务分配所述分配内存大小的内存块;
记录模块,用于在所述为所述目标任务分配所述分配内存大小的内存块之后,记录分配给所述目标任务的内存块的地址信息及所述目标任务的标识信息,并根据所记录的不同时刻的标识信息定位内存泄露的源头,其中,所述标识信息包括:目标任务的名称信息、目标任务所在文件的文件名称信息、目标任务所在文件的行号信息,所述地址信息包括:内存块的起始地址信息、内存块的终止地址信息、内存块的大小信息、地址边界标识信息;
内存改写确定模块,用于:
在检测到有内存释放时,识别释放的内存块的地址边界标识信息及释放内存的目标任务的标识信息;
判断释放的内存块的地址边界标识信息与记录的所述目标任务的地址边界标识信息是否一致;
如果不一致,则确定所述目标任务被分配的内存被改写。
5.根据权利要求4所述的装置,其特征在于,所述第一分配模块,具体用于:
在所述第一内存池中包含多个满足所述分配内存大小的空闲内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
6.根据权利要求4所述的装置,其特征在于,所述第二分配模块,具体用于:
在预先保留的第二内存池中包含多个满足所述分配内存大小的内存块的情况下,确定满足所述分配内存大小的每个空闲内存块的大小与所述分配内存大小的差值;
识别差值最小的空闲内存块;
在识别出的空闲内存块中,将所述分配内存大小的内存块分配给所述目标任务。
CN201510906621.0A 2015-12-09 2015-12-09 一种内存分配方法及装置 Active CN105302738B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510906621.0A CN105302738B (zh) 2015-12-09 2015-12-09 一种内存分配方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510906621.0A CN105302738B (zh) 2015-12-09 2015-12-09 一种内存分配方法及装置

Publications (2)

Publication Number Publication Date
CN105302738A CN105302738A (zh) 2016-02-03
CN105302738B true CN105302738B (zh) 2018-09-11

Family

ID=55200026

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510906621.0A Active CN105302738B (zh) 2015-12-09 2015-12-09 一种内存分配方法及装置

Country Status (1)

Country Link
CN (1) CN105302738B (zh)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107765991B (zh) * 2016-08-19 2019-03-01 北京百度网讯科技有限公司 用于传输消息的方法和装置
CN108062247B (zh) * 2016-11-09 2021-09-14 腾讯科技(深圳)有限公司 一种内存管理方法及系统
CN108108307A (zh) * 2016-11-24 2018-06-01 中移(杭州)信息技术有限公司 一种资源处理方法及终端
CN107179997A (zh) * 2017-06-12 2017-09-19 合肥东芯通信股份有限公司 一种配置存储单元的方法及装置
CN107273141B (zh) * 2017-07-10 2020-12-29 无锡走向智能科技有限公司 嵌入式实时操作系统
CN107632929B (zh) * 2017-08-21 2020-06-05 北京京东尚科信息技术有限公司 一种检测内存泄漏的方法和装置
CN109426565B (zh) * 2017-09-05 2024-01-02 中兴通讯股份有限公司 一种内存分配方法、装置及终端
CN107704199A (zh) * 2017-09-07 2018-02-16 郑州云海信息技术有限公司 一种固态硬盘的逻辑分区方法及装置
CN107844372B (zh) * 2017-10-17 2021-09-07 广东睿江云计算股份有限公司 一种内存分配的方法、系统
CN108132841A (zh) * 2017-12-11 2018-06-08 杭州迪普科技股份有限公司 一种基于Linux系统的设备的内存分配方法及装置
CN108255608B (zh) * 2018-01-10 2020-07-31 武汉斗鱼网络科技有限公司 一种内存池的管理方法
CN110209489B (zh) * 2018-02-28 2020-07-31 贵州白山云科技股份有限公司 一种适用于内存页结构的内存管理方法及装置
CN110543351B (zh) * 2018-05-29 2023-11-17 华为技术有限公司 数据处理方法以及计算机设备
CN109213596B (zh) * 2018-08-01 2023-03-10 青岛海信移动通信技术股份有限公司 一种分配终端内存的方法和设备
CN109375985B (zh) * 2018-09-06 2021-04-06 新华三技术有限公司成都分公司 内存动态管理方法及装置
CN109710409B (zh) * 2018-12-24 2022-02-18 郑州云海信息技术有限公司 一种内存管理方法、系统、装置及可读存储介质
CN110781129B (zh) * 2019-09-12 2022-02-22 苏州浪潮智能科技有限公司 一种fpga异构加速卡集群中的资源调度方法、设备及介质
CN110928680B (zh) * 2019-11-09 2023-09-12 上交所技术有限责任公司 一种适用于证券交易系统的订单内存分配方法
CN112860423A (zh) * 2019-11-28 2021-05-28 深圳云天励飞技术有限公司 显存管理方法及相关产品
CN111367671B (zh) * 2020-03-03 2023-12-29 深信服科技股份有限公司 一种内存分配方法、装置、设备及可读存储介质
CN113448720A (zh) * 2020-03-27 2021-09-28 腾讯科技(深圳)有限公司 一种内存分配方法、装置、设备及存储介质
CN111475299B (zh) * 2020-04-03 2024-05-07 Oppo广东移动通信有限公司 内存分配方法、装置、存储介质及电子设备
CN112860444B (zh) * 2021-04-26 2021-08-20 腾讯科技(深圳)有限公司 内存调用信息的确定方法和装置、存储介质及电子设备
CN114385370B (zh) * 2022-01-18 2022-10-25 重庆紫光华山智安科技有限公司 内存分配方法、系统、设备及介质
CN115658561B (zh) * 2022-11-16 2023-03-14 石家庄科林电气股份有限公司 配电终端内存管理方法、装置、电子设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1722106A (zh) * 2004-07-13 2006-01-18 中兴通讯股份有限公司 一种嵌入式实时操作系统中内存分配的方法
CN102156675A (zh) * 2010-02-12 2011-08-17 中兴通讯股份有限公司 一种内存分配方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101355193B1 (ko) * 2007-12-11 2014-01-27 삼성전자주식회사 실시간 임베디드 시스템의 메모리 관리 장치 및 메모리할당/해제/관리 방법
CN102810071B (zh) * 2011-05-30 2015-01-28 联想(北京)有限公司 控制方法、控制装置以及计算机

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1722106A (zh) * 2004-07-13 2006-01-18 中兴通讯股份有限公司 一种嵌入式实时操作系统中内存分配的方法
CN102156675A (zh) * 2010-02-12 2011-08-17 中兴通讯股份有限公司 一种内存分配方法及装置

Also Published As

Publication number Publication date
CN105302738A (zh) 2016-02-03

Similar Documents

Publication Publication Date Title
CN105302738B (zh) 一种内存分配方法及装置
CN105242882B (zh) 时序数据的帧存储方法及装置、时序数据查询方法及装置
CN106383852A (zh) 基于Docker容器的日志获取方法和装置
CN103620606B (zh) 存储检测装置、系统及存储检测方法
CN105988688A (zh) 一种截图的方法及装置
CN106407244A (zh) 基于多数据库的数据查询方法、系统和装置
CN108399101A (zh) 资源调度的方法、装置和系统
CN107506145B (zh) 一种物理存储调度方法及云主机创建方法
CN106844055B (zh) 一种任务的执行方法和装置
CN105357042A (zh) 一种高可用集群系统及其主节点和从节点
CN110704438B (zh) 一种区块链中布隆过滤器的生成方法及装置
CN103152390A (zh) 分布式存储系统的节点配置方法、装置、节点及系统
CN108268305A (zh) 用于虚拟机自动扩缩容的系统和方法
CN108664394A (zh) 一种内存泄露过程追溯方法及装置
CN111314174A (zh) 基于区块链和sdn边缘计算网络系统的网络拨测方法及装置
CN112131196A (zh) 一种分布式日志处理方法、装置、终端设备及存储介质
CN106326014A (zh) 一种资源访问方法及装置
CN109325026A (zh) 基于大数据平台的数据处理方法、装置、设备及介质
CN105468699A (zh) 去重数据统计方法及设备
CN108123967A (zh) 一种集群系统的数据同步方法和系统
CN110046189A (zh) 数据传输方法及其装置
CN106411638A (zh) 一种云监控系统中监控数据的处理方法及系统
CN106682198B (zh) 一种实现自动化部署数据库的方法和装置
CN106339265A (zh) 一种组合任务处理方法及装置
CN106406771B (zh) 日志记录方法及日志记录器

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant