CN115168243A - 一种内存空间管理方法、装置、电子设备及存储介质 - Google Patents

一种内存空间管理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN115168243A
CN115168243A CN202110356552.6A CN202110356552A CN115168243A CN 115168243 A CN115168243 A CN 115168243A CN 202110356552 A CN202110356552 A CN 202110356552A CN 115168243 A CN115168243 A CN 115168243A
Authority
CN
China
Prior art keywords
memory
pool
memory block
address
block
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
CN202110356552.6A
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.)
Sonoscape Medical Corp
Original Assignee
Sonoscape Medical Corp
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 Sonoscape Medical Corp filed Critical Sonoscape Medical Corp
Priority to CN202110356552.6A priority Critical patent/CN115168243A/zh
Publication of CN115168243A publication Critical patent/CN115168243A/zh
Pending legal-status Critical Current

Links

Images

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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • G06F12/0623Address space extension for memory modules

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种内存空间管理方法,所述内存空间管理方法包括:分配内存池并为内存池设置头指针和尾指针;接收数据存储任务,并确定数据存储任务对应的待分配内存大小;判断尾指针与内存池的结束地址之间的空闲内存区域是否大于或等于待分配内存大小;若是,则将数据存储任务对应的新数据存储至尾指针与内存池的结束地址之间的空闲内存区域;若否,则将尾指针指向的地址更新为内存池的起始地址,并将数据存储任务对应的新数据存储至尾指针与头指针之间的空闲内存区域。本申请能够保证数据存储的连续性,提升存储系统性能。本申请还公开了一种内存空间管理装置、一种电子设备及一种存储介质,具有以上有益效果。

Description

一种内存空间管理方法、装置、电子设备及存储介质
技术领域
本申请涉及数据存储技术领域,特别涉及一种内存空间管理方法、装置、一种电子设备及一种存储介质。
背景技术
随着云计算、大数据、物联网等技术的发展,数据的存储和传输越来越受到人们的重视。在数据处理过程中,若接收到上一节点传递来的输入数据,需要根据数据大小分配对应内存作为中间缓存。若数据处理环节的复杂较高,则需要进行多次的内存分配。
相关技术中,在接收到数据存储任务之后往往根据上一次数据存储的位置继续存储,可能会出现数据存储地址不连续的情况,影响存储系统性能。
因此,如何保证数据存储的连续性,提升存储系统性能是本领域技术人员目前需要解决的技术问题。
发明内容
本申请的目的是提供一种内存空间管理方法、装置、一种电子设备及一种存储介质,能够保证数据存储的连续性,提升存储系统性能。
为解决上述技术问题,本申请提供一种内存空间管理方法,该内存空间管理方法包括:
分配内存池并为所述内存池设置头指针和尾指针;其中,所述头指针指向所述内存池中已使用空间的起始地址,所述尾指针指向所述内存池中已使用空间的结束地址;
接收数据存储任务,并确定所述数据存储任务对应的待分配内存大小;
判断所述尾指针与所述内存池的结束地址之间的空闲内存区域是否大于或等于所述待分配内存大小;
若是,则将所述数据存储任务对应的新数据存储至所述尾指针与所述内存池的结束地址之间的空闲内存区域;
若否,则将所述尾指针指向的地址更新为所述内存池的起始地址,并将所述数据存储任务对应的新数据存储至所述尾指针与所述头指针之间的空闲内存区域。
可选的,还包括:
接收内存回收请求,并确定所述内存回收请求对应的待回收内存块;
判断所述待回收内存块是否为头部内存块或尾部内存块;其中,所述头部内存块是起始地址为所述头指针的内存块,所述尾部内存块是结束地址为所述尾指针的内存块;
若是,则回收所述待回收内存块和与所述待回收内存块相邻且被标记为已释放但未回收的内存块;
若否,则将所述待回收内存块标记为所述已释放内存块。
可选的,在将所述尾指针指向的地址更新为所述内存池的起始地址之后,还包括:
将更新地址前的尾指针与所述内存池的结束地址之间的空闲内存区域标记为所述已释放内存块。
可选的,所述内存块包括块头和数据区,所述块头包括数据长度和是否已释放标记,所述数据区用于存储接收的数据;
相应的,将所述待回收内存块标记为所述已释放内存块,包括:
在所述待回收内存块的块头中将所述待回收内存块标记为所述已释放内存块。
可选的,还包括:
回收内存块后,若所述头指针指向所述内存池的结束地址,则将所述头指针指向的地址更新为所述内存池的起始地址;
相应的,
回收内存块后,若所述尾指针指向所述内存池的起始地址,则将所述尾指针指向的地址更新为所述内存池的结束地址。
可选的,在将所述待回收内存块标记为所述已释放内存块之后,还包括:
判断与所述待回收内存块相邻的内存块是否被标记为所述已释放内存块;
若是,则合并相邻的已释放内存块。
可选的,在判定所述尾指针与所述内存池的结束地址之间的空闲内存区域小于所述待分配内存大小之后,还包括:
判断所述内存池的起始地址与所述头指针之间的空闲内存区域是否大于或等于所述待分配内存大小;
若是,则进入将所述尾指针指向的地址更新为所述内存池的起始地址的步骤;
若否,则分配新内存池,并将所述新数据存储至所述新内存池。
本申请还提供了一种内存空间管理装置,该装置包括:
指针设置模块,用于分配内存池并为所述内存池设置头指针和尾指针;其中,所述头指针指向所述内存池中已使用空间的起始地址,所述尾指针指向所述内存池中已使用空间的结束地址;
待分配内存确定模块,用于接收数据存储任务,并确定所述数据存储任务对应的待分配内存大小;
数据存储模块,用于判断所述尾指针与所述内存池的结束地址之间的空闲内存区域是否大于或等于所述待分配内存大小;若是,则将所述数据存储任务对应的新数据存储至所述尾指针与所述内存池的结束地址之间的空闲内存区域;若否,则将所述尾指针指向的地址更新为所述内存池的起始地址,并将所述数据存储任务对应的新数据存储至所述尾指针与所述头指针之间的空闲内存区域。
本申请还提供了一种存储介质,其上存储有计算机程序,所述计算机程序执行时实现上述内存空间管理方法执行的步骤。
本申请还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时实现上述内存空间管理方法执行的步骤。
本申请提供了一种内存空间管理方法,包括:分配内存池并为所述内存池设置头指针和尾指针;其中,所述头指针指向所述内存池中已使用空间的起始地址,所述尾指针指向所述内存池中已使用空间的结束地址;接收数据存储任务,并确定所述数据存储任务对应的待分配内存大小;判断所述尾指针与所述内存池的结束地址之间的空闲内存区域是否大于或等于所述待分配内存大小;若是,则将所述数据存储任务对应的新数据存储至所述尾指针与所述内存池的结束地址之间的空闲内存区域;若否,则将所述尾指针指向的地址更新为所述内存池的起始地址,并将所述数据存储任务对应的新数据存储至所述尾指针与所述头指针之间的空闲内存区域。
本申请利用头指针和尾指针标记内存池中已使用空间,在接收到数据存储任务时,判断将要存储的新数据是否能存储至尾指针与内存池的结束地址之间的空闲内存区域。若尾指针与内存池的结束地址之间的空闲内存空间无法存储新数据,则将所述尾指针指向的地址更新为所述内存池的起始地址,以便将新数据存储至尾指针与头指针之间的空闲内存区域。本申请通过上述方式保证新数据的存储地址在内存池中保持连续,进而保证数据存储的连续性,提升了存储系统性能。本申请同时还提供了一种内存空间管理装置、一种电子设备和一种存储介质,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种内存空间管理方法的流程图;
图2为本申请实施例所提供的第一种内存块分配原理示意图;
图3为本申请实施例所提供的第二种内存块分配原理示意图;
图4为本申请实施例所提供的一种内存空间管理方法的流程图;
图5为本申请实施例所提供的一种内存块的结构示意图;
图6为本申请实施例所提供的一种头部内存块回收方法的原理示意图;
图7为本申请实施例所提供的一种尾部内存块回收方法的原理示意图;
图8为本申请实施例所提供的第一种中部内存块回收方法的原理示意图;
图9为本申请实施例所提供的第二种中部内存块回收方法的原理示意图;
图10为本申请实施例所提供的一种头指针位置设置方法示意图;
图11为本申请实施例所提供的一种尾指针位置设置方法示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面请参见图1,图1为本申请实施例所提供的一种内存空间管理方法的流程图。
具体步骤可以包括:
S101:分配内存池并为所述内存池设置头指针和尾指针。
其中,本实施例可以应用于具有数据存储功能的电子设备中,如存储服务器、图像处理装置等。在本步骤之前,本实施例可以向操作系统请求分配一块连续的内存作为环形内存池,上述环形内存池的起始地址与终止地址相邻。本实施例可以为使用者提供接口,以便使用者从内存池中按需分配出期望大小的一小块内存(即,内存块)。内存池包括已使用空间和空闲内存空间,头指针指向所述内存池中已使用空间的起始地址,所述尾指针指向所述内存池中已使用空间的结束地址。
可以理解的是,本实施例通过调整尾指针的位置分配内存块,在分配内存块的过程中,除了尾指针跳转至内存池的起始地址之外,尾指针始终向内存池的结束地址方向移动。若以环形图表示内存池,在分配内存块的过程中,头指针的位置不变,尾指针的位置始终按照顺时针或逆时针的方向移动。在回收内存块的过程中,头指针的地址和尾指针的地址均可以随内存块的回收而移动。
S102:接收数据存储任务,并确定所述数据存储任务对应的待分配内存大小。
其中,在接收到数据存储任务之后,可以解析数据存储任务以确定待分配内存大小。每一数据存储任务对应的待分配内存大小可以不相同,本实施例可以根据每一次的分配需求在内存池动态分配对应大小的内存块,以便在内存块中存储数据存储任务对应的新数据。
S103:判断尾指针与内存池的结束地址之间的空闲内存区域是否大于或等于所述待分配内存大小;若是,则进入S104;若否,则进入S105。
由于分配的内存块需要在内存池中保持连续,因此在分配存储块之前需要先判断尾指针与内存池的结束地址之间的空闲内存区域是否大于或等于待分配内存大小,若是则可以直接调整尾指针实现内存块分配,若否则在将尾指针更新为所述内存池的起始地址之后再调整尾指针实现内存块分配。
S104:将所述数据存储任务对应的新数据存储至所述尾指针与所述内存池的结束地址之间的空闲内存区域。
S105:将尾指针指向的地址更新为内存池的起始地址,并将数据存储任务对应的新数据存储至尾指针与所述头指针之间的空闲内存区域。
本实施例使用头指针和尾指针标识内存池中的已使用空间,在保证图像处理的临时内存需求的同时缩减系统的总体内存消耗。具体的,头指针指向已使用空间的起始地址,尾指针指向已使用空间的结束地址。已使用空间为内存池中已存储数据或无法继续连续存储数据的空间,内存池中已分配的内存块均在已使用空间内。内存池中除了已使用空间之外的空间为空闲内存区域,本实施例可以将尾指针的位置向距离最近的空闲内存区域方向移动,以便在内存池中分配新的内存块。
请参见图2,图2为本申请实施例所提供的第一种内存块分配原理示意图,如图2所示,本实施例通过头指针和尾指针来标记已使用空间的起始地址和结束地址,其余的空间为未使用的空闲内存区域。在申请内存池时,头指针和尾指针都指向内存池的头部。在每次申请分配内存时,本实施例可以从尾指针指向的位置向后增加移动进行分配,如图2所示先分配内存块1,再分配内存块2,然后分配内存块3。
本实施例利用头指针和尾指针标记内存池中已使用空间,在接收到数据存储任务时,判断将要存储的新数据是否能存储至尾指针与内存池的结束地址之间的空闲内存区域。若尾指针与内存池的结束地址之间的空闲内存空间无法存储新数据,则将所述尾指针指向的地址更新为所述内存池的起始地址,以便将新数据存储至尾指针与头指针之间的空闲内存区域。本实施例通过上述方式保证新数据的存储地址在内存池中保持连续,进而保证数据存储的连续性,提升了存储系统性能。
作为对于图1对应实施例的进一步介绍,在将所述尾指针指向的地址更新为所述内存池的起始地址之后,还可以将更新地址前的尾指针与所述内存池的结束地址之间的空闲内存区域标记为所述已释放内存块。请参见图3,图3为本申请实施例所提供的第二种内存块分配原理示意图,如图3所示,当内存池已分配内存块4至6后,内存池尾部的空闲内存区域不能满足将要分配的内存块7时,会尝试回到内存池的头部进行分配,此时尾指针会回到内存池的头部区域,而内存池尾部剩余的区域被标记为已释放内存块。在图3所示的方案中由于更新尾指针位置所产生的已释放内存块为头指针与尾指针之间不可存储新数据的内存块,即属于内存池中的已使用区域的一部分。
相关技术中,在将存储至内存的数据传输给下一节点后,往往立即释放内存。但是上述内存管理方法容易导致系统出现内存碎片,当系统中内存碎片较多时可能会导致无法根据需要分配内存,最终造成存储系统异常。
下面请参见图4,图4为本申请实施例所提供的一种内存空间管理方法的流程图,本实施例能够保证内存池中已分配内存块的连续性,避免出现内存碎片,提升存储系统性能,本实施例可以包括以下步骤:
S401:接收内存回收请求,并确定所述内存回收请求对应的待回收内存块。
其中,在接收到内存回收请求之后,本实施例可以解析内存回收请求得到待回收内存标识,进而确定对应的待回收内存块。
S402:判断待回收内存块是否为头部内存块或尾部内存块;若是,则进入S403;若否,则进入S404。
其中,本实施例根据内存块在已使用空间的位置将已分配的内存块划分为以下三类:头部内存块、中部内存块和尾部内存块。具体的,头部内存块为起始地址为所述头指针的内存块,所述尾部内存块为结束地址为所述尾指针的内存块,已使用空间中除了头部内存块和尾部内存块之外的其他已分配内存块为中部内存块。
S403:回收待回收内存块和与待回收内存块相邻且被标记为已释放但未回收的内存块。
其中,上述被回收的内存块包括待回收内存块,还包括与待回收内存块相邻且未被回收的已释放内存块。
S404:将待回收内存块标记为已释放内存块。
可以理解的是,直接删除中部内存块将会导致内存池的已使用空间不连续,在频繁执行分配内存块和回收内存块的操作时,内存池中极易出现存储内存碎片。本实施例提供了一种根据内存块的类别回收内存块的方案,即:在判定待回收内存块为头部内存块或尾部内存块时可以回收该待回收内存块;在判定待回收内存块为中部内存块时仅对待回收内存块进行标记,并不对待回收内存块进行实际的内存回收操作。进一步的,本实施例在确定待回收内存块为头部内存块或尾部内存块时,还判断是否存在与待回收内存块相邻且被标记为已释放内存块的内存块,若存在则将待回收内存块和标记为已释放的内存块一起回收。通过上述方案能够避免回收中部内存块导致出现内存碎片的情况,保证了内存池中已使用区域的连续性。上述实施例可以应用于频繁的分配和释放临时内存的场景,提高内存分配效率和内存复用度。
进一步的,在将所述待回收内存块标记为所述已释放内存块之后,还可以判断与所述待回收内存块相邻的内存块是否被标记为所述已释放内存块;若是,则合并相邻的已释放内存块对应的内存块。本实施不限定已释放内存块的数量,本实施例可以将待回收内存块与一个或多个相邻的被标记为已释放内存块的内存块进行合并。
以上实施例可以应用于超声图像处理算法,在超声图像处理算法处理图像时,由于图像数据较大,处理频繁,需要分配大量的内存用于存储图像数据的输入、输出以及中间缓存。为了从操作系统驱动程序中获取超声图像数据,需要按数据的大小分配一块内存,将数据从驱动程序中拷贝出来,然后将该内存传递给下游的处理环节。在数据处理环节(例如图像增强算法)接受到上游传递来的输入数据后,需要根据数据大小分配对应的中间缓存,对数据进行加工处理,然后将处理结果拷贝到输出缓存中。上述实施例通过共用一块内存,避免各算法处理过程各自分配占用,缩减了内存的占用,提高内存的使用效率。本实施例不同于一般的内存池方案,无需花费复杂的管理结构来对内存进行维护,而仅仅使用头尾指针来标识内存可用的有效区域,提升内存的分配效率。本实施例适用的场景为需要频繁的分配和释放的临时内存,使得不存在内存碎片的问题。
本实施例利用头指针和尾指针标记内存池中已分配的内存块,在进行内存块回收时先判断回收内存块是否为头部内存块或尾部内存块。若待回收内存块不为头部内存块或尾部内存块时,仅将待回收内存块标记为已释放内存块,不进行回收。若待回收内存块为头部内存块或尾部内存块时,则将待回收内存块及相邻的但未被回收的已释放内存块一起回收。通过上述方式能够保证内存池中已分配内存块的连续性,避免出现内存碎片,提升存储系统性能。
请参见图5,图5为本申请实施例所提供的一种内存块的结构示意图,如图5所示每个内存块包括块头和数据区。块头中记录数据区长度以及块状态(是否被标记为释放状态)等信息,数据区用于返回给申请者实际使用的内存。块状态为已添加释放标记的状态或未添加释放标记的状态。相应的,上述实施例可以通过以下方式将待回收内存块标记为已释放内存块:在待回收内存块的块头中将待回收内存块标记为所述已释放内存块。
请参见图6,图6为本申请实施例所提供的一种头部内存块回收方法的原理示意图,头部内存块回收是指将要回收的内存块为头指针指向的内存块,此时可以将头指针向后(向内存池的结束地址)移动。如图6所示,头指针向后移动以便依次回收内存块1和内存块2。
请参见图7,图7为本申请实施例所提供的一种尾部内存块回收方法的原理示意图,尾部内存块回收是指将要回收的内存块为尾指针指向的内存块,此时可以将尾指针向前(向内存池的起始地址)移动。如图7所示,头指针向后移动以便依次回收内存块3和内存块2。
请参见图8,图8为本申请实施例所提供的第一种中部内存块回收方法的原理示意图,当待回收内存块为中部内存块时,可以将待回收内存块标记为已释放内存块,在与已释放内存块相邻的头部内存块或尾部内存块将要被回收时一起进行回收。因此若待回收内存块为所述头部内存块,则可以通过调整所述头指针的位置回收所述待回收内存块以及与待回收内存块相邻且被标记为已释放内存块的内存块。如图8所示,若待回收内存块为内存块2时,可以将内存块2标记为已释放内存块,若内存块1将要被回收时可以将内存块1和内存块2(即图8中的已释放内存块)一起回收。
请参见图9,图9为本申请实施例所提供的第二种中部内存块回收方法的原理示意图,当待回收内存块为中部内存块时,可以将待回收内存块标记为已释放内存块,在与已释放内存块相邻的头部内存块或尾部内存块将要被回收时一起进行回收。因此若所述待回收内存块为所述尾部内存块,则通过调整所述尾指针的位置回收所述待回收内存块以及与所述待回收内存块相邻且被标记为已释放但未回收的内存块。如图9所示,若待回收内存块为内存块2时,可以将内存块2标记为已释放内存块,若内存块3将要被回收时可以将内存块2(即图9中的已释放内存块)和内存块3一起回收。
进一步的,在回收内存块的过程中,若所述头指针指向所述内存池的结束地址,则将所述头指针指向的地址更新为所述内存池的起始地址。若所述尾指针指向所述内存池的起始地址,则将所述尾指针指向的地址更新为所述内存池的结束地址。
根据图8和图9对应的实施例可知,如果待回收内存块既不是头指针指向的头部内存块也不是尾指针指向的尾部内存块,则说明将要回收的是中部内存块,那么在回收时仅仅将中部内存块中标记为已释放模块,后续随着头部内存块或者尾部内存块一起回收。
请参见图10,图10为本申请实施例所提供的一种头指针位置设置方法示意图,如图所示若所述头指针指向所述内存池的结束地址,则将所述头指针更新为所述内存池的起始地址。请参见图11,图11为本申请实施例所提供的一种尾指针位置设置方法示意图,当待回收的内存块位于内存池的头部或者尾部时,头指针或者尾指针会跨越内存池的尾部。进一步的,若所述尾指针指向所述内存池的起始地址,则将所述头指针更新为所述内存池的终止地址。
进一步的,当内存池中的空闲内存区域不能满足新的分配需要时,可以返回分配失败的信息,也可以初始化一块新内存池以便满足后续的分配需要。具体的在判定所述尾指针与所述内存池的结束地址之间的空闲内存区域小于所述待分配内存大小之后,若内存池的起始地址与头指针之间的空闲内存区域无法存储新数据,则说明内存池的剩余空间不足,此时可以重新分配新内存池,并将新数据存储至所述新内存池的头尾指针与所述新内存池的结束地址之间的空闲内存区域,此时头尾指针均指向起始地址。可以理解的是,新内存池中存在自身的头指针和尾指针,在分配新内存池后新内存池的头指针和尾指针均指向新内存池的起始地址,在存储数据的过程中可以根据尾指针的地址将新数据存储至新内存池的空闲内存空间。
当然若原来内存池的起始地址与头指针之间的空闲内存区域可以存储新数据,可以将所述尾指针指向的地址更新为原来内存池的起始地址,并将数据存储任务对应的新数据存储至原来内存池的尾指针与头指针之间的空闲内存区域。
本申请实施例还提供一种内存空间管理装置,该装置可以包括:
指针设置模块,用于分配内存池并为所述内存池设置头指针和尾指针;其中,所述头指针指向所述内存池中已使用空间的起始地址,所述尾指针指向所述内存池中已使用空间的结束地址;
待分配内存确定模块,用于接收数据存储任务,并确定所述数据存储任务对应的待分配内存大小;
数据存储模块,用于判断所述尾指针与所述内存池的结束地址之间的空闲内存区域是否大于或等于所述待分配内存大小;若是,则将所述数据存储任务对应的新数据存储至所述尾指针与所述内存池的结束地址之间的空闲内存区域;若否,则将所述尾指针指向的地址更新为所述内存池的起始地址,并将所述数据存储任务对应的新数据存储至所述尾指针与所述头指针之间的空闲内存区域。
本实施例利用头指针和尾指针标记内存池中已使用空间,在接收到数据存储任务时,判断将要存储的新数据是否能存储至尾指针与内存池的结束地址之间的空闲内存区域。若尾指针与内存池的结束地址之间的空闲内存空间无法存储新数据,则将所述尾指针指向的地址更新为所述内存池的起始地址,以便将新数据存储至尾指针与头指针之间的空闲内存区域。本实施例通过上述方式保证新数据的存储地址在内存池中保持连续,进而保证数据存储的连续性,提升了存储系统性能。
进一步的,还包括:
待回收内存块确定模块,用于接收内存回收请求,并确定所述内存回收请求对应的待回收内存块;
判断模块,用于判断所述待回收内存块是否为头部内存块或尾部内存块;其中,所述头部内存块是起始地址为所述头指针的内存块,所述尾部内存块是结束地址为所述尾指针的内存块;
回收模块,用于若待回收内存块为头部内存块或尾部内存块,则回收所述待回收内存块和与所述待回收内存块相邻且被标记为已释放但未回收的内存块;
标记模块,用于待回收内存块不为头部内存块或尾部内存块,则将所述待回收内存块标记为所述已释放内存块。
进一步的,还包括:
已释放内存块设置模块,用于在将所述尾指针指向的地址更新为所述内存池的起始地址之后,将更新地址前的尾指针与所述内存池的结束地址之间的空闲内存区域标记为所述已释放内存块。
进一步的,所述内存块包括块头和数据区,所述块头包括数据长度和是否已释放标记,所述数据区用于存储接收的数据;
相应的,标记模块,用于在所述待回收内存块的块头中将所述待回收内存块标记为所述已释放内存块。
进一步的,还包括:
头指针调整模块,用于在回收内存块后,若所述头指针指向所述内存池的结束地址,则将所述头指针指向的地址更新为所述内存池的起始地址;
尾指针调整模块,用于在回收内存块后,若所述尾指针指向所述内存池的起始地址,则将所述尾指针指向的地址更新为所述内存池的结束地址。
进一步的,还包括:
合并模块,用于在将所述待回收内存块标记为所述已释放内存块之后,判断与所述待回收内存块相邻的内存块是否被标记为所述已释放内存块;若是,则合并相邻的已释放内存块。
进一步的,还包括:
内存池创建模块,用于在判定所述尾指针与所述内存池的结束地址之间的空闲内存区域小于所述待分配内存大小之后,判断所述内存池的起始地址与所述头指针之间的空闲内存区域是否大于或等于所述待分配内存大小;若是,则进入将所述尾指针指向的地址更新为所述内存池的起始地址的步骤;若否,则分配新内存池,并将所述新数据存储至所述新内存池的尾指针与所述新内存池的结束地址之间的空闲内存区域。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本申请还提供了一种存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请还提供了一种电子设备,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然所述电子设备还可以包括各种网络接口,电源等组件。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (10)

1.一种内存空间管理方法,其特征在于,包括:
分配内存池并为所述内存池设置头指针和尾指针;其中,所述头指针指向所述内存池中已使用空间的起始地址,所述尾指针指向所述内存池中已使用空间的结束地址;
接收数据存储任务,并确定所述数据存储任务对应的待分配内存大小;
判断所述尾指针与所述内存池的结束地址之间的空闲内存区域是否大于或等于所述待分配内存大小;
若是,则将所述数据存储任务对应的新数据存储至所述尾指针与所述内存池的结束地址之间的空闲内存区域;
若否,则将所述尾指针指向的地址更新为所述内存池的起始地址,并将所述数据存储任务对应的新数据存储至所述尾指针与所述头指针之间的空闲内存区域。
2.根据权利要求1所述内存空间管理方法,其特征在于,还包括:
接收内存回收请求,并确定所述内存回收请求对应的待回收内存块;
判断所述待回收内存块是否为头部内存块或尾部内存块;其中,所述头部内存块是起始地址为所述头指针的内存块,所述尾部内存块是结束地址为所述尾指针的内存块;
若是,则回收所述待回收内存块和与所述待回收内存块相邻且被标记为已释放但未回收的内存块;
若否,则将所述待回收内存块标记为所述已释放内存块。
3.根据权利要求2所述内存空间管理方法,其特征在于,在将所述尾指针指向的地址更新为所述内存池的起始地址之后,还包括:
将更新地址前的尾指针与所述内存池的结束地址之间的空闲内存区域标记为所述已释放内存块。
4.根据权利要求2所述内存空间管理方法,其特征在于,所述内存块包括块头和数据区,所述块头包括数据长度和是否已释放标记,所述数据区用于存储接收的数据;
相应的,将所述待回收内存块标记为所述已释放内存块,包括:
在所述待回收内存块的块头中将所述待回收内存块标记为所述已释放内存块。
5.根据权利要求2所述内存空间管理方法,其特征在于,还包括:
回收内存块后,若所述头指针指向所述内存池的结束地址,则将所述头指针指向的地址更新为所述内存池的起始地址;
相应的,
回收内存块后,若所述尾指针指向所述内存池的起始地址,则将所述尾指针指向的地址更新为所述内存池的结束地址。
6.根据权利要求2所述内存空间管理方法,其特征在于,在将所述待回收内存块标记为所述已释放内存块之后,还包括:
判断与所述待回收内存块相邻的内存块是否被标记为所述已释放内存块;
若是,则合并相邻的已释放内存块。
7.根据权利要求1至6任一项所述内存空间管理方法,其特征在于,在判定所述尾指针与所述内存池的结束地址之间的空闲内存区域小于所述待分配内存大小之后,还包括:
判断所述内存池的起始地址与所述头指针之间的空闲内存区域是否大于或等于所述待分配内存大小;
若是,则进入将所述尾指针指向的地址更新为所述内存池的起始地址的步骤;
若否,则分配新内存池,并将所述新数据存储至所述新内存池。
8.一种内存空间管理装置,其特征在于,包括:
指针设置模块,用于分配内存池并为所述内存池设置头指针和尾指针;其中,所述头指针指向所述内存池中已使用空间的起始地址,所述尾指针指向所述内存池中已使用空间的结束地址;
待分配内存确定模块,用于接收数据存储任务,并确定所述数据存储任务对应的待分配内存大小;
数据存储模块,用于判断所述尾指针与所述内存池的结束地址之间的空闲内存区域是否大于或等于所述待分配内存大小;若是,则将所述数据存储任务对应的新数据存储至所述尾指针与所述内存池的结束地址之间的空闲内存区域;若否,则将所述尾指针指向的地址更新为所述内存池的起始地址,并将所述数据存储任务对应的新数据存储至所述尾指针与所述头指针之间的空闲内存区域。
9.一种电子设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时实现如权利要求1至7任一项所述内存空间管理方法的步骤。
10.一种存储介质,其特征在于,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如权利要求1至7任一项所述内存空间管理方法的步骤。
CN202110356552.6A 2021-04-01 2021-04-01 一种内存空间管理方法、装置、电子设备及存储介质 Pending CN115168243A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110356552.6A CN115168243A (zh) 2021-04-01 2021-04-01 一种内存空间管理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110356552.6A CN115168243A (zh) 2021-04-01 2021-04-01 一种内存空间管理方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN115168243A true CN115168243A (zh) 2022-10-11

Family

ID=83476408

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110356552.6A Pending CN115168243A (zh) 2021-04-01 2021-04-01 一种内存空间管理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN115168243A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116775506A (zh) * 2023-08-22 2023-09-19 腾讯科技(深圳)有限公司 内存回收方法、装置、设备和介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116775506A (zh) * 2023-08-22 2023-09-19 腾讯科技(深圳)有限公司 内存回收方法、装置、设备和介质
CN116775506B (zh) * 2023-08-22 2023-12-05 腾讯科技(深圳)有限公司 内存回收方法、装置、设备和介质

Similar Documents

Publication Publication Date Title
CN107066498B (zh) 键值kv存储方法和装置
US8862703B2 (en) Address server
CN109542682B (zh) 一种数据备份方法、装置、设备和存储介质
JP2017102908A (ja) ソリッドステートドライブ及びその動作方法
JP2004206733A (ja) 永続的且つロバストな記憶割当てシステム及び方法
JP2004127205A (ja) 不揮発性メモリへのデータ貯蔵方法及び装置
US20060200500A1 (en) Method of efficiently recovering database
CN104424030B (zh) 多进程操作共享内存的方法和装置
CN112947856B (zh) 一种内存数据的管理方法、装置、计算机设备及存储介质
US10073648B2 (en) Repartitioning data in a distributed computing system
CN110968417B (zh) 管理存储单元的方法、装置、系统和计算机存储介质
EP3865992A2 (en) Distributed block storage system, method, apparatus and medium
KR102114245B1 (ko) 그래픽스 상태 관리 장치 및 방법
CN102968380A (zh) 内存文件系统中内存分区的管理方法和装置
CN110069336A (zh) 内存资源分配方法、分配装置、芯片和存储装置
CN114253713B (zh) 一种基于reactor的异步批处理方法及系统
CN115168243A (zh) 一种内存空间管理方法、装置、电子设备及存储介质
CN111291062A (zh) 数据同步写入方法、装置、计算机设备及存储介质
WO2021082720A1 (zh) 一种数据处理方法及装置
CN104115127A (zh) 存储系统和数据管理方法
CN112764662B (zh) 用于存储管理的方法、设备和计算机程序产品
US10877881B2 (en) In-place garbage collection of a sharded, replicated distributed state machine based on mergeable operations
CN111124751A (zh) 数据恢复方法及系统、数据存储节点、数据库管理节点
CN113778688B (zh) 内存管理系统、内存管理方法、内存管理装置
CN114328285A (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