一种内存管理方法及装置与流程

文档序号:11386448阅读:185来源:国知局
一种内存管理方法及装置与流程

本发明涉及数据库内存管理的技术领域,特别是指一种内存管理方法及装置。



背景技术:

任何应用程序都有自己的内存管理模型,找到一个适合的方法无疑可以提高系统的整体性能。数据库管理系统作为一个大型复杂软件系统,更需要一个稳定可靠的内存管理方法。但现有内存管理方法往往不能够便捷可靠地对内存进行内存分配和释放,从而不利于提高系统的整体性能。



技术实现要素:

本发明的目的在于提供一种内存管理方法及装置,用以解决现有内存管理方法可靠性及便捷性较低的问题。

为了实现上述目的,本发明提供了一种内存管理方法,包括:

创建内存节点树结构,所述内存节点树结构包括:多个内存节点,每个所述内存节点中记录有该内存节点与所述内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;

根据所述内存节点树结构,在所述内存节点中进行内存管理。

其中,所述根据所述内存节点树结构,在所述内存节点中进行内存管理,包括:

根据所述内存节点树结构,在所述内存节点中进行内存分配或内存释放。

其中,所述内存使用状态信息包括内存块链表及空闲内存片数组,所述内存块链表用于记录所述内存节点所占用的、按预设顺序排列的所有内存块,所述空闲内存片数组用于记录所述内存块中被回收的内存片,其中,所述内存片为在所述内存块中进行内存分配时产生的内存片段。

其中,所述根据所述内存节点树结构,在所述内存节点中进行内存分配,包括:

在所述内存节点树的多个内存节点中,确定需要进行内存分配的当前内存节点;

判断申请分配内存是否大于所述当前内存节点所占用的内存块中允许分配内存片的最大值,得出第一判断结果;

若所述第一判断结果为是,则分配一个新内存块,将所述新内存块的所有内存作为一个内存片进行分配,并将所述新内存块加入到所述内存块链表的活动内存块的后面,所述活动内存块为在所述内存块链表中排在首位的内存块;

若所述第一判断结果为否,则判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,得出第二判断结果;

若所述第二判断结果为是,则对所述当前内存节点的空闲内存片数组中合适的空闲内存片进行分配,否则,在所述当前内存节点的活动内存块中进行内存分配。

其中,所述在所述当前内存节点的活动内存块中进行内存分配,包括:

判断所述当前内存节点的活动内存块中未分配的内存是否大于或等于申请分配内存,得出第三判断结果;

若所述第三判断结果为是,则在所述当前内存节点的活动内存块中分配与所述申请分配内存对应大小的内存片;

若所述第三判断结果为否,则将所述当前内存节点的活动内存块中未分配的内存加入到所述当前内存节点的空闲内存片数组中,并分配重新分配一内存块,在重新分配的内存块中分配与所述申请分配内存对应大小的内存片,且将所述重新分配的内存块作为所述当前内存节点的活动内存块。

其中,所述判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,包括:

判断所述当前内存节点的空闲内存片数组中是否存在一空闲内存片满足预设条件,所述预设条件为所述空闲内存片的内存大于申请分配的内存,且所述空闲内存片的内存与所述申请分配的内存之间的内存差值处于预设范围内;

若所述当前内存节点的空闲内存片数组中存在一空闲内存片满足所述预设 条件,则判断出所述当前内存节点的空闲内存片数组中存在合适的空闲内存片,否则,判断出所述当前内存节点的空闲内存片数组中不存在合适的空闲内存片。

其中,所述根据所述内存节点树结构,在所述内存节点中进行内存释放,包括:

接收内存片释放指令;

根据所述内存片释放指令,判断待释放内存片的内存是否大于所述待释放内存片所归属内存块中允许分配内存片的最大值,得出第四判断结果;

若所述第四判断结果为是,则释放所述待释放内存片,否则,将所述待释放内存片加入到所述待释放内存片所归属内存块对应内存节点的空闲内存片数组中。

其中,所述根据所述内存节点树结构,在所述内存节点中进行内存释放,包括:

接收内存节点释放指令;

根据所述内存节点释放指令及待释放内存节点与所述内存节点树结构中其他内存节点之间的关联关系,判断所述待释放内存节点是否存在子内存节点;

若所述待释放内存节点存在子内存节点,则释放所述待释放内存节点及所述待释放内存节点的子内存节点所占用的所有内存块,否则,释放所述待释放内存节点所占用的所有内存块。

本发明的实施例还提供了一种内存管理装置,包括:

创建模块,用于创建内存节点树结构,所述内存节点树结构包括:多个内存节点,每个所述内存节点中记录有该内存节点与所述内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;

管理模块,用于根据所述内存节点树结构,在所述内存节点中进行内存管理。

其中,所述管理模块具体用于根据所述内存节点树结构,在所述内存节点中进行内存分配或内存释放。

其中,所述内存使用状态信息包括内存块链表及空闲内存片数组,所述内存块链表用于记录所述内存节点所占用的、按预设顺序排列的所有内存块,所述空闲内存片数组用于记录所述内存块中被回收的内存片,其中,所述内存片 为在所述内存块中进行内存分配时产生的内存片段。

其中,所述管理模块包括:

确定子模块,用于在所述内存节点树的多个内存节点中,确定需要进行内存分配的当前内存节点;

第一判断子模块,用于判断申请分配内存是否大于所述当前内存节点所占用的内存块中允许分配内存片的最大值,得出第一判断结果;

第一处理子模块,用于若所述第一判断结果为是,则分配一个新内存块,将所述新内存块的所有内存作为一个内存片进行分配,并将所述新内存块加入到所述内存块链表的活动内存块的后面,所述活动内存块为在所述内存块链表中排在首位的内存块;

第二判断子模块,用于若所述第一判断结果为否,则判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,得出第二判断结果;

第二处理子模块,用于若所述第二判断结果为是,则对所述当前内存节点的空闲内存片数组中合适的空闲内存片进行分配,否则,在所述当前内存节点的活动内存块中进行内存分配。

其中,所述第二处理子模块包括:

第一判断单元,用于判断所述当前内存节点的活动内存块中未分配的内存是否大于或等于申请分配内存,得出第三判断结果;

分配单元,用于若所述第三判断结果为是,则在所述当前内存节点的活动内存块中分配与所述申请分配内存对应大小的内存片;

处理单元,用于若所述第三判断结果为否,则将所述当前内存节点的活动内存块中未分配的内存加入到所述当前内存节点的空闲内存片数组中,并分配重新分配一内存块,在重新分配的内存块中分配与所述申请分配内存对应大小的内存片,且将所述重新分配的内存块作为所述当前内存节点的活动内存块。

其中,所述第二判断子模块包括:

第二判断单元,用于判断所述当前内存节点的空闲内存片数组中是否存在一空闲内存片满足预设条件,所述预设条件为所述空闲内存片的内存大于申请分配的内存,且所述空闲内存片的内存与所述申请分配的内存之间的内存差值处于预设范围内;

第三判断单元,用于若所述当前内存节点的空闲内存片数组中存在一空闲内存片满足所述预设条件,则判断出所述当前内存节点的空闲内存片数组中存在合适的空闲内存片,否则,判断出所述当前内存节点的空闲内存片数组中不存在合适的空闲内存片。

其中,所述管理模块包括:

第一接收子模块,用于接收内存片释放指令;

第三判断子模块,用于根据所述内存片释放指令,判断待释放内存片的内存是否大于所述待释放内存片所归属内存块中允许分配内存片的最大值,得出第四判断结果;

第三处理子模块,用于若所述第四判断结果为是,则释放所述待释放内存片,否则,将所述待释放内存片加入到所述待释放内存片所归属内存块对应内存节点的空闲内存片数组中。

其中,所述管理模块包括:

第二接收子模块,用于接收内存节点释放指令;

第四判断子模块,用于根据所述内存节点释放指令及待释放内存节点与所述内存节点树结构中其他内存节点之间的关联关系,判断所述待释放内存节点是否存在子内存节点;

第四处理子模块,用于若所述待释放内存节点存在子内存节点,则释放所述待释放内存节点及所述待释放内存节点的子内存节点所占用的所有内存块,否则,释放所述待释放内存节点所占用的所有内存块。

本发明实施例具有以下有益效果:

本发明实施例的内存管理方法,创建内存节点树结构,内存节点树结构包括:多个内存节点,每个内存节点中记录有该内存节点与内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;根据内存节点树结构,在内存节点中进行内存管理。本发明实施例中根据内存节点树中记录的内存节点之间的关联信息,及每个内存节点所占用内存块的内存使用状态信息,能够清楚地了解每个内存块之间的层次关系,进而能够便捷可靠地对内存块进行内存管理。

附图说明

图1为本发明实施例的内存管理方法的第一工作流程图;

图2为本发明实施例的内存管理方法的第二工作流程图;

图3为本发明实施例的内存管理方法中内存节点树的结构示意图;

图4为本发明实施例的内存管理方法中内存节点的结构示意图;

图5为本发明实施例的内存管理方法中内存分配的工作流程图;

图6为本发明实施例的内存管理装置的结构框图。

具体实施方式

为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合具体实施例及附图进行详细描述。

本发明的实施例提供了一种内存管理方法及装置,解决了现有内存管理方法可靠性及便捷性较低的问题。

第一实施例:

如图1所示,本发明实施例的内存管理方法,包括:

步骤11:创建内存节点树结构,所述内存节点树结构包括:多个内存节点,每个所述内存节点中记录有该内存节点与所述内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息。

在本发明的具体实施例中,内存节点树结构可具体包括根内存节点,该根内存节点的至少一个子内存节点,每个内存节点中都定义了该内存节点所占用内存块的具体位置、大小等相关信息以及与其他内存节点之间的关联信息,只要能获得这个内存节点,就可以获得其子节点的内存使用状态信息。

步骤12:根据所述内存节点树结构,在所述内存节点中进行内存管理。

具体的,内存的分配、重分配和释放都可在内存节点中进行,无需再使用标准库函数malloc、realloc和free等来进行操作。当进行内存操作时,需要指定某个具体的内存节点,然后在其上面进行。可具体定义一个当前内存节点,用来表示当前操作的内存节点,可以把当前内存节点切换为需要进行操作的内存节点。

本发明实施例的内存管理方法,创建内存节点树结构,内存节点树结构包 括:多个内存节点,每个内存节点中记录有该内存节点与内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;根据内存节点树结构,在内存节点中进行内存管理。本发明实施例中根据内存节点树中记录的内存节点之间的关联信息,及每个内存节点所占用内存块的内存使用状态信息,能够清楚地了解每个内存块之间的层次关系,进而能够便捷可靠地对内存块进行内存管理。

第二实施例:

如图2所示,本发明实施例的内存管理方法,包括:

步骤21:创建内存节点树结构,所述内存节点树结构包括:多个内存节点,每个所述内存节点中记录有该内存节点与所述内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息。

这里,内存使用状态信息包括内存块链表及空闲内存片数组,所述内存块链表用于记录所述内存节点所占用的、按预设顺序排列的所有内存块,所述空闲内存片数组用于记录所述内存块中被回收的内存片,其中,所述内存片为在所述内存块中进行内存分配时产生的内存片段。

在本发明的具体实施例中,内存节点树是过内存节点间构成树形结构进行管理的,如图3所示。内存节点树包括根内存节点(内存节点1),该根内存节点的子内存节点(内存节点2、内存节点3、内存节点4、内存节点5),内存节点2的子内存节点(内存节点6)及内存节点3的子内存节点(内存节点8),每个内存节点的结构具体如图4所示,包括多个内存块,每个内存块包括多个内存片,及用于记录内存块中被回收的内存片的内存片空闲数组。通过该内存节点树结构可以跟踪所有的内存节点的创建和使用情况,当创建一个新的内存节点时,将其添到某个已存在的内存节点下面作为其子节点。在清除内存时让待删除节点作为根节点开始遍历内存节点树可以将其所有节点占用的内存完全释放。另外,程序中可以根据需要创建不止一个顶层内存节点。

下面具体举例说明内存节点的内部结构。

如下所示,一个数据结构1的实例就代表了一个内存节点,该结构体显示了每个内存节点的具体信息。下面对该结构体的字段进行详细说明。

数据结构1:

数据结构2:

其中,内存块链表blocks:

该元素为一个指向memoryblock结构体的指针,memoryblock用于表示一个内存块。memoryblock之间通过next字段链接成一个单向链表,而memoryinfo的blocks字段则指向这个链表的头部。

freelist数组:

该数组用于维护在内存块中被回收的空闲内存片,这些空闲内存片将被用于再分配。freelist数组元素类型为memorychunk指针类型,数组长度由宏allocset_num_freelists定义,现设计为11。

每个memoryinfo结构都对应一个内存节点的内存使用情况,memoryinfo所管理的内存区域被分成若干个内存块(block),内存块用memoryblock结构(数据结构3)表示。每个内存块内又被分成多个称为内存片(memorychunk)的单 元。

数据结构3:

memoryblock记录在一块内存区域的起始地址处,这块内存区域通过标准库函数malloc进行分配,称为一个内存块。在每个内存块中进行内存分配时产生的内存片段称之为内存片,每个内存片包括一个头部信息和数据区域,其中头部信息包括该内存片所属的内存节点以及该内存区的其他相关信息,数据区则存储实际数据。内存片的头部信息由数据结构memorychunk描述(数据结构4),内存片的数据区域则紧跟在其头部信息之后分配。

数据结构4:

在本发明的具体实施例中,内存节点树制向操作系统为内存块预先分配一定内存,以供系统需要内存分配的地方使用,降低向系统反复申请、释放内存的次数,提高内存分配效率及系统整体性能。

步骤22:根据所述内存节点树结构,在所述内存节点中进行内存分配或内存释放。

本发明实施例中采用一种称为内存节点树的内存管理机制,系统中的内存分配操作在各种语义的内存节点中进行,所有在内存节点中分配的内存空间都通过内存节点进行记录。能够很轻松地通过释放内存节点来释放其中的所有内容,而不用费心地去释放其中的每一块内存,使得内存分配和释放更加快捷和可靠。

下面具体说明本发明实施例中的内存分配和释放管理过程。

(一)内存分配管理

如图5所示,本发明实施例中,根据所述内存节点树结构,在所述内存节点中进行内存分配,包括:

步骤51:在所述内存节点树的多个内存节点中,确定需要进行内存分配的当前内存节点。

步骤52:判断申请分配内存是否大于所述当前内存节点所占用的内存块中允许分配内存片的最大值,得出第一判断结果。

步骤53:若所述第一判断结果为是,则分配一个新内存块,将所述新内存块的所有内存作为一个内存片进行分配,并将所述新内存块加入到所述内存块链表的活动内存块的后面,所述活动内存块为在所述内存块链表中排在首位的内存块。

这里,将所述新内存块加入到所述内存块链表的活动内存块的后面之后,返回分配出去的内存片的指针。

步骤54:若所述第一判断结果为否,则判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,得出第二判断结果。

步骤55:若所述第二判断结果为是,则对所述当前内存节点的空闲内存片数组中合适的空闲内存片进行分配,否则,在所述当前内存节点的活动内存块中进行内存分配。

具体的,若存在合适的空闲内存片,则进行复用,并返回复用空闲内存片的指针。其中,判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,包括:判断所述当前内存节点的空闲内存片数组中是否存在一空闲内存片满足预设条件,所述预设条件为所述空闲内存片的内存大于申请分配的内存,且所述空闲内存片的内存与所述申请分配的内存之间的内存差值处于预 设范围内;若所述当前内存节点的空闲内存片数组中存在一空闲内存片满足所述预设条件,则判断出所述当前内存节点的空闲内存片数组中存在合适的空闲内存片,否则,判断出所述当前内存节点的空闲内存片数组中不存在合适的空闲内存片。

进一步地,上述在所述当前内存节点的活动内存块中进行内存分配,包括:

判断所述当前内存节点的活动内存块中未分配的内存是否大于或等于申请分配内存,得出第三判断结果;

若所述第三判断结果为是,则在所述当前内存节点的活动内存块中分配与所述申请分配内存对应大小的内存片;

若所述第三判断结果为否,则将所述当前内存节点的活动内存块中未分配的内存加入到所述当前内存节点的空闲内存片数组中,并分配重新分配一内存块,在重新分配的内存块中分配与所述申请分配内存对应大小的内存片,且将所述重新分配的内存块作为所述当前内存节点的活动内存块。

这里,在当前内存节点的活动内存块中未分配的内存小于申请分配内存时,需要重新分配一内存块,但是当前的活动内存块中还有未分配空间,若重新分配内存块并将其作为新的活动内存块,则当前活动内存块中的未分配空间就会浪费。为了避免浪费,本发明实施例先将当前活动内存块中的未分配空间分解成个数尽可能少的内存片(即每个内存片尽可能大),并将它们加入到内存片空闲数组中,然后重新分配一个内存块(其大小为前一次分配的内存块的两倍,但不超过内存块的最大值)并将之作为新的活动内存块(即加入到内存块链表的首部)。最后在新的活动内存块中分配与申请分配内存对应大小的内存片,并返回其指针。

(二)内存释放管理

在本发明的具体实施例中,释放内存节点中的内存,主要有以下两种方式:

(1)释放内存节点中指定的内存片:

若要释放的内存片独占整个内存块,即该内存片是超过内存块中允许分配内存片的最大值而分配的,则将整个内存块直接释放,归还给操作系统。否则,将该内存片加入到内存片空闲数组中以便下次分配。

具体的,接收内存片释放指令;

根据所述内存片释放指令,判断待释放内存片的内存是否大于所述待释放内存片所归属内存块中允许分配内存片的最大值,得出第四判断结果;

若所述第四判断结果为是,则释放所述待释放内存片,否则,将所述待释放内存片加入到所述待释放内存片所归属内存块对应内存节点的空闲内存片数组中。

(2)释放内存节点全部内存块

释放当前内存节点中的所有内存块,但内存节点本身并不会释放,因为内存节点是在父节点中申请的内存,将由父节点进行管理。

具体的,接收内存节点释放指令;

根据所述内存节点释放指令及待释放内存节点与所述内存节点树结构中其他内存节点之间的关联关系,判断所述待释放内存节点是否存在子内存节点;

若所述待释放内存节点存在子内存节点,则释放所述待释放内存节点及所述待释放内存节点的子内存节点所占用的所有内存块,否则,释放所述待释放内存节点所占用的所有内存块。

本发明实施例降低了向系统反复申请、释放内存的次数,提高内存分配效率,提高系统整体性能,减少内存碎片,提高了内存利用率。

第三实施例:

如图6所示,本发明的实施例还提供了一种内存管理装置,包括:

创建模块61,用于创建内存节点树结构,所述内存节点树结构包括:多个内存节点,每个所述内存节点中记录有该内存节点与所述内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;

管理模块62,用于根据所述内存节点树结构,在所述内存节点中进行内存管理。

本发明实施例的内存管理装置,所述管理模块62具体用于根据所述内存节点树结构,在所述内存节点中进行内存分配或内存释放。

本发明实施例的内存管理装置,所述内存使用状态信息包括内存块链表及空闲内存片数组,所述内存块链表用于记录所述内存节点所占用的、按预设顺序排列的所有内存块,所述空闲内存片数组用于记录所述内存块中被回收的内存片,其中,所述内存片为在所述内存块中进行内存分配时产生的内存片段。

本发明实施例的内存管理装置,所述管理模块62包括:

确定子模块621,用于在所述内存节点树的多个内存节点中,确定需要进行内存分配的当前内存节点;

第一判断子模块622,用于判断申请分配内存是否大于所述当前内存节点所占用的内存块中允许分配内存片的最大值,得出第一判断结果;

第一处理子模块623,用于若所述第一判断结果为是,则分配一个新内存块,将所述新内存块的所有内存作为一个内存片进行分配,并将所述新内存块加入到所述内存块链表的活动内存块的后面,所述活动内存块为在所述内存块链表中排在首位的内存块;

第二判断子模块624,用于若所述第一判断结果为否,则判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,得出第二判断结果;

第二处理子模块625,用于若所述第二判断结果为是,则对所述当前内存节点的空闲内存片数组中合适的空闲内存片进行分配,否则,在所述当前内存节点的活动内存块中进行内存分配。

本发明实施例的内存管理装置,所述第二处理子模块625包括:

第一判断单元6251,用于判断所述当前内存节点的活动内存块中未分配的内存是否大于或等于申请分配内存,得出第三判断结果;

分配单元6252,用于若所述第三判断结果为是,则在所述当前内存节点的活动内存块中分配与所述申请分配内存对应大小的内存片;

处理单元6253,用于若所述第三判断结果为否,则将所述当前内存节点的活动内存块中未分配的内存加入到所述当前内存节点的空闲内存片数组中,并分配重新分配一内存块,在重新分配的内存块中分配与所述申请分配内存对应大小的内存片,且将所述重新分配的内存块作为所述当前内存节点的活动内存块。

本发明实施例的内存管理装置,所述第二判断子模块624包括:

第二判断单元6241,用于判断所述当前内存节点的空闲内存片数组中是否存在一空闲内存片满足预设条件,所述预设条件为所述空闲内存片的内存大于申请分配的内存,且所述空闲内存片的内存与所述申请分配的内存之间的内存差值处于预设范围内;

第三判断单元6242,用于若所述当前内存节点的空闲内存片数组中存在一空闲内存片满足所述预设条件,则判断出所述当前内存节点的空闲内存片数组中存在合适的空闲内存片,否则,判断出所述当前内存节点的空闲内存片数组中不存在合适的空闲内存片。

本发明实施例的内存管理装置,所述管理模块62包括:

第一接收子模块626,用于接收内存片释放指令;

第三判断子模块627,用于根据所述内存片释放指令,判断待释放内存片的内存是否大于所述待释放内存片所归属内存块中允许分配内存片的最大值,得出第四判断结果;

第三处理子模块628,用于若所述第四判断结果为是,则释放所述待释放内存片,否则,将所述待释放内存片加入到所述待释放内存片所归属内存块对应内存节点的空闲内存片数组中。

本发明实施例的内存管理装置,所述管理模块62包括:

第二接收子模块629,用于接收内存节点释放指令;

第四判断子模块6210,用于根据所述内存节点释放指令及待释放内存节点与所述内存节点树结构中其他内存节点之间的关联关系,判断所述待释放内存节点是否存在子内存节点;

第四处理子模块6211,用于若所述待释放内存节点存在子内存节点,则释放所述待释放内存节点及所述待释放内存节点的子内存节点所占用的所有内存块,否则,释放所述待释放内存节点所占用的所有内存块。

需要说明的是,该装置是与上述方法实施例对应的装置,上述方法实施例中所有实现方式均适用于该装置的实施例中,也能达到相同的技术效果。

本发明实施例的内存管理方法和装置,创建内存节点树结构,内存节点树结构包括:多个内存节点,每个内存节点中记录有该内存节点与内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;根据内存节点树结构,在内存节点中进行内存管理。本发明实施例中根据内存节点树中记录的内存节点之间的关联信息,及每个内存节点所占用内存块的内存使用状态信息,能够清楚地了解每个内存块之间的层次关系,进而能够便捷可靠地对内存块进行内存管理。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1