CN107133182A - 一种内存管理方法及装置 - Google Patents

一种内存管理方法及装置 Download PDF

Info

Publication number
CN107133182A
CN107133182A CN201610112157.2A CN201610112157A CN107133182A CN 107133182 A CN107133182 A CN 107133182A CN 201610112157 A CN201610112157 A CN 201610112157A CN 107133182 A CN107133182 A CN 107133182A
Authority
CN
China
Prior art keywords
memory
node
memory node
block
internal
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
Application number
CN201610112157.2A
Other languages
English (en)
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.)
FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD
Peking University Founder Information Industry Group Co Ltd
Peking University Founder Group Co Ltd
Original Assignee
FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD
Peking University Founder Information Industry Group Co Ltd
Peking University Founder Group 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 FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD, Peking University Founder Information Industry Group Co Ltd, Peking University Founder Group Co Ltd filed Critical FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD
Priority to CN201610112157.2A priority Critical patent/CN107133182A/zh
Publication of CN107133182A publication Critical patent/CN107133182A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/16General purpose computing application
    • G06F2212/163Server or database system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)

Abstract

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

Description

一种内存管理方法及装置
技术领域
本发明涉及数据库内存管理的技术领域,特别是指一种内存管理方法及装置。
背景技术
任何应用程序都有自己的内存管理模型,找到一个适合的方法无疑可以提高***的整体性能。数据库管理***作为一个大型复杂软件***,更需要一个稳定可靠的内存管理方法。但现有内存管理方法往往不能够便捷可靠地对内存进行内存分配和释放,从而不利于提高***的整体性能。
发明内容
本发明的目的在于提供一种内存管理方法及装置,用以解决现有内存管理方法可靠性及便捷性较低的问题。
为了实现上述目的,本发明提供了一种内存管理方法,包括:
创建内存节点树结构,所述内存节点树结构包括:多个内存节点,每个所述内存节点中记录有该内存节点与所述内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;
根据所述内存节点树结构,在所述内存节点中进行内存管理。
其中,所述根据所述内存节点树结构,在所述内存节点中进行内存管理,包括:
根据所述内存节点树结构,在所述内存节点中进行内存分配或内存释放。
其中,所述内存使用状态信息包括内存块链表及空闲内存片数组,所述内存块链表用于记录所述内存节点所占用的、按预设顺序排列的所有内存块,所述空闲内存片数组用于记录所述内存块中被回收的内存片,其中,所述内存片为在所述内存块中进行内存分配时产生的内存片段。
其中,所述根据所述内存节点树结构,在所述内存节点中进行内存分配,包括:
在所述内存节点树的多个内存节点中,确定需要进行内存分配的当前内存节点;
判断申请分配内存是否大于所述当前内存节点所占用的内存块中允许分配内存片的最大值,得出第一判断结果;
若所述第一判断结果为是,则分配一个新内存块,将所述新内存块的所有内存作为一个内存片进行分配,并将所述新内存块加入到所述内存块链表的活动内存块的后面,所述活动内存块为在所述内存块链表中排在首位的内存块;
若所述第一判断结果为否,则判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,得出第二判断结果;
若所述第二判断结果为是,则对所述当前内存节点的空闲内存片数组中合适的空闲内存片进行分配,否则,在所述当前内存节点的活动内存块中进行内存分配。
其中,所述在所述当前内存节点的活动内存块中进行内存分配,包括:
判断所述当前内存节点的活动内存块中未分配的内存是否大于或等于申请分配内存,得出第三判断结果;
若所述第三判断结果为是,则在所述当前内存节点的活动内存块中分配与所述申请分配内存对应大小的内存片;
若所述第三判断结果为否,则将所述当前内存节点的活动内存块中未分配的内存加入到所述当前内存节点的空闲内存片数组中,并分配重新分配一内存块,在重新分配的内存块中分配与所述申请分配内存对应大小的内存片,且将所述重新分配的内存块作为所述当前内存节点的活动内存块。
其中,所述判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,包括:
判断所述当前内存节点的空闲内存片数组中是否存在一空闲内存片满足预设条件,所述预设条件为所述空闲内存片的内存大于申请分配的内存,且所述空闲内存片的内存与所述申请分配的内存之间的内存差值处于预设范围内;
若所述当前内存节点的空闲内存片数组中存在一空闲内存片满足所述预设条件,则判断出所述当前内存节点的空闲内存片数组中存在合适的空闲内存片,否则,判断出所述当前内存节点的空闲内存片数组中不存在合适的空闲内存片。
其中,所述根据所述内存节点树结构,在所述内存节点中进行内存释放,包括:
接收内存片释放指令;
根据所述内存片释放指令,判断待释放内存片的内存是否大于所述待释放内存片所归属内存块中允许分配内存片的最大值,得出第四判断结果;
若所述第四判断结果为是,则释放所述待释放内存片,否则,将所述待释放内存片加入到所述待释放内存片所归属内存块对应内存节点的空闲内存片数组中。
其中,所述根据所述内存节点树结构,在所述内存节点中进行内存释放,包括:
接收内存节点释放指令;
根据所述内存节点释放指令及待释放内存节点与所述内存节点树结构中其他内存节点之间的关联关系,判断所述待释放内存节点是否存在子内存节点;
若所述待释放内存节点存在子内存节点,则释放所述待释放内存节点及所述待释放内存节点的子内存节点所占用的所有内存块,否则,释放所述待释放内存节点所占用的所有内存块。
本发明的实施例还提供了一种内存管理装置,包括:
创建模块,用于创建内存节点树结构,所述内存节点树结构包括:多个内存节点,每个所述内存节点中记录有该内存节点与所述内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;
管理模块,用于根据所述内存节点树结构,在所述内存节点中进行内存管理。
其中,所述管理模块具体用于根据所述内存节点树结构,在所述内存节点中进行内存分配或内存释放。
其中,所述内存使用状态信息包括内存块链表及空闲内存片数组,所述内存块链表用于记录所述内存节点所占用的、按预设顺序排列的所有内存块,所述空闲内存片数组用于记录所述内存块中被回收的内存片,其中,所述内存片为在所述内存块中进行内存分配时产生的内存片段。
其中,所述管理模块包括:
确定子模块,用于在所述内存节点树的多个内存节点中,确定需要进行内存分配的当前内存节点;
第一判断子模块,用于判断申请分配内存是否大于所述当前内存节点所占用的内存块中允许分配内存片的最大值,得出第一判断结果;
第一处理子模块,用于若所述第一判断结果为是,则分配一个新内存块,将所述新内存块的所有内存作为一个内存片进行分配,并将所述新内存块加入到所述内存块链表的活动内存块的后面,所述活动内存块为在所述内存块链表中排在首位的内存块;
第二判断子模块,用于若所述第一判断结果为否,则判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,得出第二判断结果;
第二处理子模块,用于若所述第二判断结果为是,则对所述当前内存节点的空闲内存片数组中合适的空闲内存片进行分配,否则,在所述当前内存节点的活动内存块中进行内存分配。
其中,所述第二处理子模块包括:
第一判断单元,用于判断所述当前内存节点的活动内存块中未分配的内存是否大于或等于申请分配内存,得出第三判断结果;
分配单元,用于若所述第三判断结果为是,则在所述当前内存节点的活动内存块中分配与所述申请分配内存对应大小的内存片;
处理单元,用于若所述第三判断结果为否,则将所述当前内存节点的活动内存块中未分配的内存加入到所述当前内存节点的空闲内存片数组中,并分配重新分配一内存块,在重新分配的内存块中分配与所述申请分配内存对应大小的内存片,且将所述重新分配的内存块作为所述当前内存节点的活动内存块。
其中,所述第二判断子模块包括:
第二判断单元,用于判断所述当前内存节点的空闲内存片数组中是否存在一空闲内存片满足预设条件,所述预设条件为所述空闲内存片的内存大于申请分配的内存,且所述空闲内存片的内存与所述申请分配的内存之间的内存差值处于预设范围内;
第三判断单元,用于若所述当前内存节点的空闲内存片数组中存在一空闲内存片满足所述预设条件,则判断出所述当前内存节点的空闲内存片数组中存在合适的空闲内存片,否则,判断出所述当前内存节点的空闲内存片数组中不存在合适的空闲内存片。
其中,所述管理模块包括:
第一接收子模块,用于接收内存片释放指令;
第三判断子模块,用于根据所述内存片释放指令,判断待释放内存片的内存是否大于所述待释放内存片所归属内存块中允许分配内存片的最大值,得出第四判断结果;
第三处理子模块,用于若所述第四判断结果为是,则释放所述待释放内存片,否则,将所述待释放内存片加入到所述待释放内存片所归属内存块对应内存节点的空闲内存片数组中。
其中,所述管理模块包括:
第二接收子模块,用于接收内存节点释放指令;
第四判断子模块,用于根据所述内存节点释放指令及待释放内存节点与所述内存节点树结构中其他内存节点之间的关联关系,判断所述待释放内存节点是否存在子内存节点;
第四处理子模块,用于若所述待释放内存节点存在子内存节点,则释放所述待释放内存节点及所述待释放内存节点的子内存节点所占用的所有内存块,否则,释放所述待释放内存节点所占用的所有内存块。
本发明实施例具有以下有益效果:
本发明实施例的内存管理方法,创建内存节点树结构,内存节点树结构包括:多个内存节点,每个内存节点中记录有该内存节点与内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;根据内存节点树结构,在内存节点中进行内存管理。本发明实施例中根据内存节点树中记录的内存节点之间的关联信息,及每个内存节点所占用内存块的内存使用状态信息,能够清楚地了解每个内存块之间的层次关系,进而能够便捷可靠地对内存块进行内存管理。
附图说明
图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,用于若所述待释放内存节点存在子内存节点,则释放所述待释放内存节点及所述待释放内存节点的子内存节点所占用的所有内存块,否则,释放所述待释放内存节点所占用的所有内存块。
需要说明的是,该装置是与上述方法实施例对应的装置,上述方法实施例中所有实现方式均适用于该装置的实施例中,也能达到相同的技术效果。
本发明实施例的内存管理方法和装置,创建内存节点树结构,内存节点树结构包括:多个内存节点,每个内存节点中记录有该内存节点与内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;根据内存节点树结构,在内存节点中进行内存管理。本发明实施例中根据内存节点树中记录的内存节点之间的关联信息,及每个内存节点所占用内存块的内存使用状态信息,能够清楚地了解每个内存块之间的层次关系,进而能够便捷可靠地对内存块进行内存管理。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (16)

1.一种内存管理方法,其特征在于,包括:
创建内存节点树结构,所述内存节点树结构包括:多个内存节点,每个所述内存节点中记录有该内存节点与所述内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;
根据所述内存节点树结构,在所述内存节点中进行内存管理。
2.根据权利要求1所述内存管理方法,其特征在于,所述根据所述内存节点树结构,在所述内存节点中进行内存管理,包括:
根据所述内存节点树结构,在所述内存节点中进行内存分配或内存释放。
3.根据权利要求2所述的内存管理方法,其特征在于,所述内存使用状态信息包括内存块链表及空闲内存片数组,所述内存块链表用于记录所述内存节点所占用的、按预设顺序排列的所有内存块,所述空闲内存片数组用于记录所述内存块中被回收的内存片,其中,所述内存片为在所述内存块中进行内存分配时产生的内存片段。
4.根据权利要求3所述的内存管理方法,其特征在于,所述根据所述内存节点树结构,在所述内存节点中进行内存分配,包括:
在所述内存节点树的多个内存节点中,确定需要进行内存分配的当前内存节点;
判断申请分配内存是否大于所述当前内存节点所占用的内存块中允许分配内存片的最大值,得出第一判断结果;
若所述第一判断结果为是,则分配一个新内存块,将所述新内存块的所有内存作为一个内存片进行分配,并将所述新内存块加入到所述内存块链表的活动内存块的后面,所述活动内存块为在所述内存块链表中排在首位的内存块;
若所述第一判断结果为否,则判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,得出第二判断结果;
若所述第二判断结果为是,则对所述当前内存节点的空闲内存片数组中合适的空闲内存片进行分配,否则,在所述当前内存节点的活动内存块中进行内存分配。
5.根据权利要求4所述的内存管理方法,其特征在于,所述在所述当前内存节点的活动内存块中进行内存分配,包括:
判断所述当前内存节点的活动内存块中未分配的内存是否大于或等于申请分配内存,得出第三判断结果;
若所述第三判断结果为是,则在所述当前内存节点的活动内存块中分配与所述申请分配内存对应大小的内存片;
若所述第三判断结果为否,则将所述当前内存节点的活动内存块中未分配的内存加入到所述当前内存节点的空闲内存片数组中,并分配重新分配一内存块,在重新分配的内存块中分配与所述申请分配内存对应大小的内存片,且将所述重新分配的内存块作为所述当前内存节点的活动内存块。
6.根据权利要求4所述的内存管理方法,其特征在于,所述判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,包括:
判断所述当前内存节点的空闲内存片数组中是否存在一空闲内存片满足预设条件,所述预设条件为所述空闲内存片的内存大于申请分配的内存,且所述空闲内存片的内存与所述申请分配的内存之间的内存差值处于预设范围内;
若所述当前内存节点的空闲内存片数组中存在一空闲内存片满足所述预设条件,则判断出所述当前内存节点的空闲内存片数组中存在合适的空闲内存片,否则,判断出所述当前内存节点的空闲内存片数组中不存在合适的空闲内存片。
7.根据权利要求3所述的内存管理方法,其特征在于,所述根据所述内存节点树结构,在所述内存节点中进行内存释放,包括:
接收内存片释放指令;
根据所述内存片释放指令,判断待释放内存片的内存是否大于所述待释放内存片所归属内存块中允许分配内存片的最大值,得出第四判断结果;
若所述第四判断结果为是,则释放所述待释放内存片,否则,将所述待释放内存片加入到所述待释放内存片所归属内存块对应内存节点的空闲内存片数组中。
8.根据权利要求3所述的内存管理方法,其特征在于,所述根据所述内存节点树结构,在所述内存节点中进行内存释放,包括:
接收内存节点释放指令;
根据所述内存节点释放指令及待释放内存节点与所述内存节点树结构中其他内存节点之间的关联关系,判断所述待释放内存节点是否存在子内存节点;
若所述待释放内存节点存在子内存节点,则释放所述待释放内存节点及所述待释放内存节点的子内存节点所占用的所有内存块,否则,释放所述待释放内存节点所占用的所有内存块。
9.一种内存管理装置,其特征在于,包括:
创建模块,用于创建内存节点树结构,所述内存节点树结构包括:多个内存节点,每个所述内存节点中记录有该内存节点与所述内存节点树结构中其他内存节点之间的关联关系,及该内存节点所占用内存块的内存使用状态信息;
管理模块,用于根据所述内存节点树结构,在所述内存节点中进行内存管理。
10.根据权利要求9所述内存管理装置,其特征在于,所述管理模块具体用于根据所述内存节点树结构,在所述内存节点中进行内存分配或内存释放。
11.根据权利要求10所述的内存管理装置,其特征在于,所述内存使用状态信息包括内存块链表及空闲内存片数组,所述内存块链表用于记录所述内存节点所占用的、按预设顺序排列的所有内存块,所述空闲内存片数组用于记录所述内存块中被回收的内存片,其中,所述内存片为在所述内存块中进行内存分配时产生的内存片段。
12.根据权利要求11所述的内存管理装置,其特征在于,所述管理模块包括:
确定子模块,用于在所述内存节点树的多个内存节点中,确定需要进行内存分配的当前内存节点;
第一判断子模块,用于判断申请分配内存是否大于所述当前内存节点所占用的内存块中允许分配内存片的最大值,得出第一判断结果;
第一处理子模块,用于若所述第一判断结果为是,则分配一个新内存块,将所述新内存块的所有内存作为一个内存片进行分配,并将所述新内存块加入到所述内存块链表的活动内存块的后面,所述活动内存块为在所述内存块链表中排在首位的内存块;
第二判断子模块,用于若所述第一判断结果为否,则判断所述当前内存节点的空闲内存片数组中是否存在合适的空闲内存片,得出第二判断结果;
第二处理子模块,用于若所述第二判断结果为是,则对所述当前内存节点的空闲内存片数组中合适的空闲内存片进行分配,否则,在所述当前内存节点的活动内存块中进行内存分配。
13.根据权利要求12所述的内存管理装置,其特征在于,所述第二处理子模块包括:
第一判断单元,用于判断所述当前内存节点的活动内存块中未分配的内存是否大于或等于申请分配内存,得出第三判断结果;
分配单元,用于若所述第三判断结果为是,则在所述当前内存节点的活动内存块中分配与所述申请分配内存对应大小的内存片;
处理单元,用于若所述第三判断结果为否,则将所述当前内存节点的活动内存块中未分配的内存加入到所述当前内存节点的空闲内存片数组中,并分配重新分配一内存块,在重新分配的内存块中分配与所述申请分配内存对应大小的内存片,且将所述重新分配的内存块作为所述当前内存节点的活动内存块。
14.根据权利要求12所述的内存管理装置,其特征在于,所述第二判断子模块包括:
第二判断单元,用于判断所述当前内存节点的空闲内存片数组中是否存在一空闲内存片满足预设条件,所述预设条件为所述空闲内存片的内存大于申请分配的内存,且所述空闲内存片的内存与所述申请分配的内存之间的内存差值处于预设范围内;
第三判断单元,用于若所述当前内存节点的空闲内存片数组中存在一空闲内存片满足所述预设条件,则判断出所述当前内存节点的空闲内存片数组中存在合适的空闲内存片,否则,判断出所述当前内存节点的空闲内存片数组中不存在合适的空闲内存片。
15.根据权利要求11所述的内存管理装置,其特征在于,所述管理模块包括:
第一接收子模块,用于接收内存片释放指令;
第三判断子模块,用于根据所述内存片释放指令,判断待释放内存片的内存是否大于所述待释放内存片所归属内存块中允许分配内存片的最大值,得出第四判断结果;
第三处理子模块,用于若所述第四判断结果为是,则释放所述待释放内存片,否则,将所述待释放内存片加入到所述待释放内存片所归属内存块对应内存节点的空闲内存片数组中。
16.根据权利要求11所述的内存管理装置,其特征在于,所述管理模块包括:
第二接收子模块,用于接收内存节点释放指令;
第四判断子模块,用于根据所述内存节点释放指令及待释放内存节点与所述内存节点树结构中其他内存节点之间的关联关系,判断所述待释放内存节点是否存在子内存节点;
第四处理子模块,用于若所述待释放内存节点存在子内存节点,则释放所述待释放内存节点及所述待释放内存节点的子内存节点所占用的所有内存块,否则,释放所述待释放内存节点所占用的所有内存块。
CN201610112157.2A 2016-02-29 2016-02-29 一种内存管理方法及装置 Pending CN107133182A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610112157.2A CN107133182A (zh) 2016-02-29 2016-02-29 一种内存管理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610112157.2A CN107133182A (zh) 2016-02-29 2016-02-29 一种内存管理方法及装置

Publications (1)

Publication Number Publication Date
CN107133182A true CN107133182A (zh) 2017-09-05

Family

ID=59721681

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610112157.2A Pending CN107133182A (zh) 2016-02-29 2016-02-29 一种内存管理方法及装置

Country Status (1)

Country Link
CN (1) CN107133182A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107844372A (zh) * 2017-10-17 2018-03-27 广东睿江云计算股份有限公司 一种内存分配的方法、***
CN109471724A (zh) * 2018-10-23 2019-03-15 郑州云海信息技术有限公司 一种切换工作内存数量的方法及***
WO2019137252A1 (zh) * 2018-01-10 2019-07-18 Oppo广东移动通信有限公司 内存处理方法、电子设备、计算机可读存储介质
CN112084028A (zh) * 2020-09-07 2020-12-15 北京字节跳动网络技术有限公司 一种内存检测方法及装置
CN112214313A (zh) * 2020-09-22 2021-01-12 深圳云天励飞技术股份有限公司 内存分配方法及相关设备
CN112596908A (zh) * 2020-12-28 2021-04-02 中孚安全技术有限公司 一种基于完全二叉树的内存管理方法及***
WO2021233187A1 (zh) * 2020-05-18 2021-11-25 中科寒武纪科技股份有限公司 一种在存储器中为数据分配存储地址的方法和设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102012870A (zh) * 2010-11-18 2011-04-13 清华大学 内存分配方法
CN102122306A (zh) * 2011-03-28 2011-07-13 中国人民解放军国防科学技术大学 一种数据处理方法及应用该方法的分布式文件***
CN102999434A (zh) * 2011-09-15 2013-03-27 阿里巴巴集团控股有限公司 一种内存管理方法及装置
CN103902693A (zh) * 2014-03-28 2014-07-02 西安交通大学 一种读优化的内存数据库t树索引结构的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102012870A (zh) * 2010-11-18 2011-04-13 清华大学 内存分配方法
CN102122306A (zh) * 2011-03-28 2011-07-13 中国人民解放军国防科学技术大学 一种数据处理方法及应用该方法的分布式文件***
CN102999434A (zh) * 2011-09-15 2013-03-27 阿里巴巴集团控股有限公司 一种内存管理方法及装置
CN103902693A (zh) * 2014-03-28 2014-07-02 西安交通大学 一种读优化的内存数据库t树索引结构的方法

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107844372A (zh) * 2017-10-17 2018-03-27 广东睿江云计算股份有限公司 一种内存分配的方法、***
CN107844372B (zh) * 2017-10-17 2021-09-07 广东睿江云计算股份有限公司 一种内存分配的方法、***
WO2019137252A1 (zh) * 2018-01-10 2019-07-18 Oppo广东移动通信有限公司 内存处理方法、电子设备、计算机可读存储介质
CN109471724A (zh) * 2018-10-23 2019-03-15 郑州云海信息技术有限公司 一种切换工作内存数量的方法及***
WO2021233187A1 (zh) * 2020-05-18 2021-11-25 中科寒武纪科技股份有限公司 一种在存储器中为数据分配存储地址的方法和设备
CN112084028A (zh) * 2020-09-07 2020-12-15 北京字节跳动网络技术有限公司 一种内存检测方法及装置
CN112084028B (zh) * 2020-09-07 2022-02-25 北京字节跳动网络技术有限公司 一种内存检测方法及装置
CN112214313A (zh) * 2020-09-22 2021-01-12 深圳云天励飞技术股份有限公司 内存分配方法及相关设备
CN112596908A (zh) * 2020-12-28 2021-04-02 中孚安全技术有限公司 一种基于完全二叉树的内存管理方法及***

Similar Documents

Publication Publication Date Title
CN107133182A (zh) 一种内存管理方法及装置
CN104731799B (zh) 内存数据库管理装置
CN108038002B (zh) 一种嵌入式软件内存管理方法
CN105302738B (zh) 一种内存分配方法及装置
CN108132842B (zh) 一种嵌入式软件内存管理***
CN101799797B (zh) 分布式存储***中用户磁盘配额的动态分配方法
CN1085863C (zh) 计算机***的存储器管理***
CN100382048C (zh) 一种内存管理方法
CN108268317B (zh) 一种资源分配方法及装置
KR101013073B1 (ko) 태스크 분배 및 병렬 처리 시스템과 그 방법
CN101459901B (zh) 基于多级切片方式的矢量地图数据传输方法
CA3177212A1 (en) Resource allocating method, device, computer equipment, and storage medium
CN103765381B (zh) 对b+树的并行操作
CN103886109B (zh) 一种实现数据库行锁的方法及装置
CN106681829A (zh) 一种内存管理方法及***
CN104317742A (zh) 一种优化空间管理的自动精简配置方法
CN101276334A (zh) 一种快速检索数据的链表实现方法
CN105912402A (zh) 一种基于Actor模型的调度方法及装置
CN108959113A (zh) 用于闪存感知堆存储器管理的方法和***
CN105991478A (zh) 服务器资源分配方法及其***
CN106155917A (zh) 内存管理方法及装置
CN114389955A (zh) 嵌入式平台异构资源池化管理方法
CN105550180B (zh) 数据处理的方法、装置及***
Lwin et al. Non-redundant dynamic fragment allocation with horizontal partition in Distributed Database System
CN103699681B (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
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20170905

WD01 Invention patent application deemed withdrawn after publication