CN114490060A - 内存分配方法、装置、计算机设备和计算机可读存储介质 - Google Patents

内存分配方法、装置、计算机设备和计算机可读存储介质 Download PDF

Info

Publication number
CN114490060A
CN114490060A CN202210082263.6A CN202210082263A CN114490060A CN 114490060 A CN114490060 A CN 114490060A CN 202210082263 A CN202210082263 A CN 202210082263A CN 114490060 A CN114490060 A CN 114490060A
Authority
CN
China
Prior art keywords
target
memory
memory block
linked list
stored
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
CN202210082263.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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202210082263.6A priority Critical patent/CN114490060A/zh
Publication of CN114490060A publication Critical patent/CN114490060A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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

Landscapes

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

Abstract

本申请提供一种内存分配方法、装置、计算机设备和计算机可读存储介质,属于内存管理技术领域。所述方法包括:根据待存储数据的长度确定待分配内存的目标等级;根据待分配内存的目标等级,确定与目标等级对应的目标链表,目标链表包括至少一个指针和链表头,各指针分别指向一内存块,各指针用于指示目标链表中的各内存块的地址,链表头为各指针中的第一个指针,链表头用于指向目标链表中的各内存块中的首个空内存块;根据链表头确定目标内存块;根据内存分配指令将待存储数据存储至目标内存块,并将链表头指向目标内存块之后的首个空内存块。本申请可以减少内存碎片的产生,进而可以达到提升内存分配的效率的效果。

Description

内存分配方法、装置、计算机设备和计算机可读存储介质
技术领域
本申请涉及内存管理技术领域,具体而言,涉及一种内存分配方法、装置、计算机设备和计算机可读存储介质。
背景技术
随着科技的发展,各种各样的应用程序进入了人们的生活,给人们带来了很大的便利。在这些应用程序需要使用内存的情况下,一般都会通过调用系统的内存分配或内存释放函数来实现内存的管理。
相关技术中,在分配内存时常会使用Malloc函数,比如,在分配内存时先从堆列表中取出一个堆,并从这个堆中取出一个内存块A,在内存块A的大小大于或等于需要分配的内存大小时,将内存块A拆分成内存块B和内存块C,其中内存块B的大小与需要分配的内存大小相同,内存块C的大小为内存块A的大小减去内存块B的大小得到的差值,再将内存块B作为分配的内存块并将内存块B的地址返回,这样就完成了内存的分配。
然而,这种方法会存在导致系统内存碎片增加的问题,进而导致管理内存的效率很低。
发明内容
本申请的目的在于提供一种内存分配方法、装置、设备和计算机可读存储介质,可以减少内存碎片的产生,进而可以达到提升内存分配的效率的效果。
本申请的实施例是这样实现的:
本申请实施例的第一方面,提供一种内存分配方法,包括:
根据待存储数据的长度确定待分配内存的目标等级;
根据所述待分配内存的目标等级,确定所述目标等级对应的目标链表,所述目标链表包括至少一个指针和链表头,各指针分别指向一内存块,各指针用于指示所述目标链表中的各内存块的地址,所述链表头为各指针中的第一个指针,所述链表头用于指向所述目标链表中的各内存块中的首个空内存块;
根据所述链表头确定目标内存块;
根据内存分配指令将所述待存储数据存储至所述目标内存块,并将所述链表头指向所述目标内存块之后的首个空内存块。
可选地,所述根据内存分配指令将所述待存储数据存储至所述链表头指向的目标内存块,包括:
根据内存分配指令将所述待存储数据的长度存储至所述目标内存块的起始位置开始的预设长度的内存单元中;
将所述待存储数据存储至所述预设长度的内存单元之后的内存单元中。
可选地,所述根据所述待分配内存的目标等级,确定所述目标等级对应的目标链表之前,还包括:
根据所述待分配内存的目标等级,确定所述目标等级对应的目标内存块容量;
根据所述目标内存块容量,从内存中确定与所述目标内存块容量匹配的至少一个空内存块;
建立所述目标等级对应的目标链表,将所述目标链表的各指针分别指向与所述目标内存块容量匹配的各空内存块,并且,将所述目标链表的链表头指向与所述目标内存块容量匹配的各空内存块中的首个空内存块。
可选地,所述根据待存储数据的长度确定待分配内存的目标等级,包括:
对所述长度的值与预设长度值进行求和,得到待分配值;
根据所述待分配值和内存块链表的阶梯值,确定所述待分配内存的目标等级,其中,所述阶梯值为两个相邻等级的所述内存块链表的最大存储阈值的差值。
可选地,所述根据所述待分配值和内存块链表的阶梯值,确定所述待分配内存的目标等级,包括:
确定所述待分配值与所述阶梯值的目标比值;
将所述目标比值对应的内存等级作为所述待分配内存的目标等级。
可选地,所述确定所述待分配值与所述阶梯值的目标比值,包括:
若所述待分配值与所述阶梯值的初始比值为非整数,则对所述初始比值取整,得到所述目标比值。
可选地,所述根据内存分配指令将所述待存储数据存储至所述目标内存块之后,所述方法还包括:
根据针对所述目标内存块的内存释放指令,删除所述目标内存块中所存储的数据;
更新所述目标链表,以使得所述目标内存块作为空内存块插入所述目标链表中。
可选地,所述更新所述目标链表,包括:
将所述目标链表的链表头指向所述目标内存块。
可选地,所述方法还包括:
确定所述目标链表中的空内存块的个数;
若所述目标链表中的空内存块的个数大于或等于预设阈值,则释放依次排列在所述目标链表中的至少一个空内存块。
可选地,所述方法还包括:
若所述目标链表为空,则开辟多个内存块,并将所述多个内存块中的一个内存块作为所述目标内存块;
将所述多个内存块中的其它内存块插入所述目标链表。
可选地,所述根据所述链表头确定目标内存块,包括:
确定所述目标链表的头节点,并根据所述目标链表的头节点确定所述目标链表的所述链表头;
将所述链表头指向的内存块作为所述目标内存块。
本申请实施例的第二方面,提供了一种内存分配装置,所述内存分配装置包括:
第一确定模块,用于根据待存储数据的长度确定待分配内存的目标等级;
第二确定模块,用于根据所述待分配内存的目标等级,确定所述目标等级对应的目标链表;
第三确定模块,用于根据所述链表头确定目标内存块;
存储处理模块,用于根据内存分配指令将所述待存储数据存储至所述目标内存块,并将所述链表头指向所述目标内存块之后的首个空内存块。
可选地,所述第二确定模块还用于根据所述内存分配指令将所述待存储数据的长度存储至所述目标内存块的起始位置开始的预设长度的内存单元中;
将所述待存储数据存储至所述预设长度的内存单元之后的内存单元中。
可选地,所述第二确定模块还用于根据所述待分配内存的目标等级,确定所述目标等级对应的目标内存块容量;
根据所述目标内存块容量,从内存中确定与所述目标内存块容量匹配的至少一个空内存块;
建立所述目标等级对应的目标链表,将所述目标链表的各指针分别指向与所述目标内存块容量匹配的各空内存块,并且,将所述目标链表的链表头指向与所述目标内存块容量匹配的各空内存块中的首个空内存块。
可选地,所述第一确定模块还用于对所述长度的值与预设长度值进行求和,得到待分配值;
根据所述待分配值和内存块链表的阶梯值,确定所述待分配内存的目标等级。
可选地,所述第一确定模块还用于确定所述待分配值与所述阶梯值的目标比值;
将所述目标比值对应的内存等级作为所述待分配内存的目标等级。
可选地,所述第一确定模块还用于对所述初始比值取整,得到所述目标比值。
可选地,所述装置还包括删除模块和更新模块。
所述删除模块用于根据针对所述目标内存块的内存释放指令,删除所述目标内存块中所存储的数据。
所述更新模块用于更新所述目标链表,以使得所述目标内存块作为空内存块插入所述目标链表中。
本申请实施例的第三方面,提供了一种计算机设备,所述计算机设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述第一方面所述的内存分配方法。
本申请实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的内存分配方法。
本申请实施例的有益效果包括:
本申请实施例提供的一种内存分配方法,通过根据待存储数据的长度确定待分配内存的目标等级,再根据该待分配内存的目标等级,确定与该目标等级对应的目标链表,然后根据该目标链表的链表头确定目标内存块,最后根据内存分配指令将该待存储数据存储至该目标内存块,并将该链表头指向该目标内存块之后的首个空内存块。其中,通过根据该待分配内存的目标等级,确定与该目标等级对应的目标链表,就可以准确地确定存储该待存储数据所需要的内存块的容量,也就可以避免出现分配的用于存储该待存储数据的内存过大的情况。通过根据内存分配指令将待存储数据存储至该目标内存块,就可以将该待存储数据存入与该目标等级对应的该目标链表中的内存块,这样就可以减少内存碎片的产生。另外,通过将该链表头指向该目标内存块之后的首个空内存块,这样,再下一次需要将待存储数据存入与该目标链表中的内存块的时候,就可以直接存入该目标链表的首个空内存块。如此,可以减少内存碎片的产生,进而可以达到提升内存分配的效率的效果。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的第一种内存分配方法的流程图;
图2为本申请实施例提供的一种目标链表的结构示意图;
图3为本申请实施例提供的一种目标内存块的结构示意图;
图4为本申请实施例提供的第二种内存分配方法的流程图;
图5为本申请实施例提供的第三种内存分配方法的流程图;
图6为本申请实施例提供的第四种内存分配方法的流程图;
图7为本申请实施例提供的第五种内存分配方法的流程图;
图8为本申请实施例提供的第六种内存分配方法的流程图;
图9为本申请实施例提供的第七种内存分配方法的流程图;
图10为本申请实施例提供的一种内存分配装置的结构示意图;
图11为本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在应用程序需要使用内存的情况下,一般都会通过调用系统的内存分配或内存释放函数来实现内存的管理。目前,在分配内存时常会使用Malloc函数,比如,在分配内存时先从堆列表中取出一个堆,并从这个堆中取出一个内存块A,在内存块A的大小大于或等于需要分配的内存大小时,将内存块A拆分成内存块B和内存块C,其中内存块B的大小与需要分配的内存大小相同,内存块C的大小为内存块A的大小减去内存块B的大小得到的差值,再将内存块B作为分配的内存块并将内存块B的地址返回,这样就完成了内存的分配。然而,这种方案在系统长时间运行的情况下,会产生大量的内存碎片,这就会导致内存分配的效率过低。另外,在释放内存时常会使用Free函数,比如,在释放内存时根据需要释放的内存块D的地址,找到与内存块D对应的堆,根据内存块D的地址和内存块D的大小,确定与内存块D相邻的内存块E和内存块F,确定内存块D是否可以与内存块E和/或内存块F合并,若可以则执行合并操作,得到内存块G,并对内存块G重复执行上述步骤直至没有可以与内存块G合并的相邻的内存块,这样就可以完成内存释放。
为此,本申请实施例提供了内存分配方法,通过确定待分配内存的目标等级,并根据目标等级确定与目标等级对应的目标链表,根据目标链表的链表头确定目标内存块,再将待存储数据存储至链表头指向的目标内存块,并将链表头指向目标内存块之后的首个空内存块,可以减少内存碎片的产生,进而可以达到提升内存分配的效率的效果。
本申请实施例以内存分配方法为例进行说明。但不表明本申请实施例仅能用于分配内存。
下面对本申请实施例提供的内存分配方法进行详细地解释说明。
图1为本申请提供的一种内存分配方法的流程图,该方法可以应用于计算机设备,该计算机设备可以是终端设备或服务器。参见图1,本申请实施例提供一种内存分配方法,包括:
步骤1001:根据待存储数据的长度确定待分配内存的目标等级。
可选地,该待存储数据的长度可以表征该待存储数据的大小。比如,该存储数据为8字节的数据,那么该待存储数据的长度即是8。
可选地,该待分配内存可以是将用来存储该待存储数据的内存大小。
可选地,该目标等级可以是根据一定规则进行设置的等级,该目标等级越高可以表征该待分配内存越大,也可以表征该待存储数据的长度越大。
例如,该待分配内存可以分为0级、1级、…、6级,共7个等级。该待分配内存的等级为0级可以表征该待分配内存较小,也即是该待存储数据的长度较大。该待分配内存的等级为6级可以表征该待分配内存较大,也即是该待存储数据的长度较大。
值得注意的是,通过根据待存储数据的长度来确定待分配内存的目标等级,这样可以更好地确定该待存储数据需要分配的内存的等级,便于执行后续步骤,可以达到提升内存分配效率的效果。
步骤1002:根据该待分配内存的目标等级,确定与该目标等级对应的目标链表。
可选地,该目标链表可以是与该待分配内存的目标等级对应的内存链表,该内存链表也可以分为多个等级,且各个等级的内存链表中的内存块大小并不相等。本申请实施例对此不做限定。
例如,该待分配内存可以分为0级、1级、…、6级,共7个等级,那么内存链表也可与分为0级、1级、…、6级,共7个等级。若该待分配内存的等级为1级,那么与该待分配内存的等级对应的目标链表就可以为2级的内存链表。本申请实施例对此不做限定。
可选地,该目标链表可以是由多个节点组成的内存块链表,并且该内存块链表还可以是单向链表,访问该单向链表第一个节点的速度最快、效率最高。该单向链表有一个头节点,指向该单向链表在内存的首地址,无论在该单向链表中访问哪一个节点,都需要从该单向链表的头节点开始,按顺序向后查找。并且,该单向链表的尾节点由于无后续节点,其指针域为空。
示例性地,该目标链表中的各个节点均有两个部分:数据域和指针域。数据域用于存放数据,指针域用于指向下一个节点地址,且该目标链表中的最后一个节点的指针域为空。
另外,访问该目标链表中的各个节点均需从该目标链表的头部开始,也就是需要从该目标链表中的第一个节点开始,该目标链表中除第一个节点之外的其他节点的地址可以分别由各个节点的上一个节点给出,第一个节点的地址可以由该目标链表的头节点给出。
也就是说,该目标链表中的各个内存块可以是按照一定顺序排列的,该目标链表中的各指针和该链表头可以用于指示该目标链表中的各内存块的排列顺序。本申请实施例对此不作限定。
可选地,该目标链表包括至少一个指针和链表头,各指针分别指向一个内存块,且各指针所指向的内存块的容量相同。
可选地,该指针可以用于指示在该目标链表中的下一个内存块的地址。
可选地,该链表头可以用于指向各指针所指向的内存块中的首个空内存块。该链表头也可以用于指向该目标链表中的各内存块中的首个空内存块。
可选地,该链表头可以是各指针中的第一个指针。
值得说明的是,通过根据该待分配内存的目标等级,确定与该目标等级对应的目标链表,由于该目标链表中的各指针指向的各内存块容量都相同,这样可以准确地确定存储该待存储数据所需要的内存块的容量,也就可以避免出现分配的用于存储该待存储数据的内存过大的情况。如此,可以减少内存碎片的产生,进而可以达到提升内存分配的效率的效果。
步骤1003:确定该链表头指向的目标内存块。
可选地,该链表头可以根据该目标链表中的各个节点中的第一个节点来确定,该第一个节点可以用于指示该目标链表中的空内存块的数量和该目标链表中的首个空内存块的地址。
可选地,该目标内存块可以是该目标链表中各指针指向的第一个内存块。
步骤1004:根据内存分配指令将该待存储数据存储至该目标内存块,并将该链表头指向该目标内存块之后的首个空内存块。
可选地,该内存分配指令可以是提前设置的由一定的条件触发的指令,也可以是在实际应用时实时生成或/输入的指令。本申请实施例对此不做限定。
可选地,该目标内存块之后的首个空内存块可以是在将该待存储数据存储至该链表头指向的目标内存块之前,在该目标链表中各指针所指向的内存块中的第二个空内存块。
一种可能的方式,若该目标链表为空,则可以开辟多个内存块,并将这多个内存块中的一个内存块作为该目标内存块。
可选地,该目标链表为空可以是指该目标链表中不存在空内存块,也可以是指该目标链表中仅存在一个空内存块,还可以是指该目标链表中存在的空内存块的数量小于预设数量,该预设数量可以为任意正整数。本申请实施例对此不作限定。
将这多个内存块中的其它内存块插入该目标链表。
可选地,这多个内存块中的其它内存块可以是指在这多个内存块中除了作为该目标内存块的其他所有内存块。
示例性地,若该目标链表为空,则调用Malloc函数开辟N个内存块,N为大于等于1的正整数。
将N个内存块中的N-1个内存块插入该目标链表;
将N个内存块中的未被插入该目标链表的一个内存块作为该目标内存块。
进一步地,将N个内存块中的N-1个内存块插入该目标链表的操作具体可以为:
将N个内存块中的N-1个内存块插入该目标链表的头部。
例如,参见图2,图2中的(a)展示了一个还未分配的内存链表的结构示意图,该内存链表包括指针1、指针2、指针3和链表头。指针1从内存块1指向内存块2,指针2从内存块2指向内存块3,指针3从内存块3指向内存块4,该链表头指向内存块1。此时,内存块1、内存块2、内存块3和内存块4均为空内存块且并未分配给任一待存储数据。
如果有待存储数据需要存入该内存链表指向的内存块,或者说,如果有该内存链表指向的内存块需要分配给待存储数据,那么就会取出当前该链表头指向的内存块1,并将内存块1作为目标内存块,将待存储数据存储到内存块1中。
图2中的(b)展示了取出第一个内存块之后的内存链表的结构示意图,该内存链表包括指针2、指针3和链表头。由于内存块1已经被分配用于存储待存储数据,那么该内存链表的链表头就不再指向内存块1,指针1也不再由内存块1指向内存块2。如图2中的(b)所示,指针2从内存块2指向内存块3,指针3从内存块3指向内存块4,该链表头指向内存块2。如果有另一个待存储数据要存入该内存链表指向的内存块,那么就会取出当前该链表头指向的内存块2,并将内存块2作为目标内存块,将待存储数据存储到内存块2中。
值得说明的是,该目标链表中各指针指向的各内存块均是容量相同的空内存块,通过将该待存储数据存储至该链表头指向的目标内存块,就可以将该待存储数据存入与该目标等级对应的该目标链表中的内存块,这样就可以减少内存碎片的产生。并通过将该链表头指向该目标内存块之后的首个空内存块,这样,再下一次需要将待存储数据存入与该目标链表中的内存块的时候,就可以直接存入该目标链表的首个空内存块。如此,可以提高内存分配的效率。
在本申请实施例中,通过根据待存储数据的长度确定待分配内存的目标等级,再根据该待分配内存的目标等级,确定与该目标等级对应的目标链表,然后根据该目标链表的链表头确定目标内存块,最后根据内存分配指令将该待存储数据存储至该链表头指向的目标内存块,并将该链表头指向该目标内存块之后的首个空内存块。其中,通过根据该待分配内存的目标等级,确定与该目标等级对应的目标链表,就可以准确地确定存储该待存储数据所需要的内存块的容量,也就可以避免出现分配的用于存储该待存储数据的内存过大的情况。通过根据内存分配指令将待存储数据存储至该目标内存块,就可以将该待存储数据存入与该目标等级对应的该目标链表中的内存块,这样就可以减少内存碎片的产生。另外,通过将该链表头指向该目标内存块之后的首个空内存块,这样,再下一次需要将待存储数据存入与该目标链表中的内存块的时候,就可以直接存入该目标链表的首个空内存块。如此,可以减少内存碎片的产生,进而可以达到提升内存分配的效率的效果。
一种可能的实现方式中,根据内存分配指令将该待存储数据存储至该链表头指向的目标内存块,包括:
根据该内存分配指令将该待存储数据的长度存储至该目标内存块的起始位置开始的预设长度的内存单元中。
可选地,接收到该内存分配指令的情况下,可以立即将该待存储数据的长度存储至该内存单元中,也可以经过预设时间之后在将该待存储数据的长度存储至该内存单元中。一般地,该预设时间可以是提前设置的,并且该预设时间可以设置的较小,比如可以将该预设时间设置为2毫秒,当然也可以设置为其他时间。本申请实施例对此不作限定。这样,可以使得该计算机设备可以有一定的处理时间,进而可以降低该计算机设备的处理压力。
可选地,该目标内存块的起始位置可以是该目标内存块中可以存储数据的第一个位置,也可以是根据一定规则设置的位置。本申请实施例对此不作限定。
进一步地,在将该待存储数据的长度存储至该目标内存块的起始位置开始的预设长度的内存单元中之后,该方法还包括:
将该目标内存块的起始位置调整到该预设长度的内存单元之后。
可选地,该预设长度的内存单元可以是该目标内存块中用于存储该待存储数据的长度的部分。
可选地,该预设长度可以是提前设置的一个长度值。例如,将该预设长度可以设置为4,那么,该预设长度的内存单元的容量为4字节。
将该待存储数据存储至该预设长度的内存单元之后的内存单元中。
可选地,该预设长度的内存单元之后的内存单元可以是该目标内存块中用于存储该待存储数据的部分,这一部分的容量为该目标内存块的容量与该预设长度的内存单元的大小的差值。
示例性地,参见图3,图3中的(a)展示了一个内存块5的示意图,由图3中的(a)可见,此时内存块5中还没有存入任何数据,也就是说内存块5还是一个空内存块,内存块5的起始位置为内存块5中可以存储数据的第一个位置。
继续参见图3,图3中的(b)展示了将该待存储数据存入之后的内存块5示意图,由图3中的(a)可见,若将内存块5作为该目标内存块,则可以将该待存储数据的长度存储到内存块5的起始位置开始的预设长度为L的内存单元中,并且可以将内存块5的起始位置调整到预设长度为L的内存单元,还可以将该待存储数据存储在该预设长度的内存单元之后的内存单元。
值得说明的是,将存入该目标内存块的数据的长度存入位于该目标内存块起始位置的预设长度的内存单元,再将将该数据存入位于该预设长度的内存单元之后的内存单元,这样,只需要通过读取该目标内存块中的该预设长度的内存单元中存储的长度就可以确定该目标内存块中存储的数据的大小或确定该目标内存块的容量。如此,可以提高内存分配的效率。
一种可能的实现方式中,参见图4,在根据该待分配内存的目标等级,确定该目标等级对应的目标链表之前,该方法还包括:
步骤1005:根据该待分配内存的目标等级,确定该目标等级对应的目标内存块容量。
可选地,与该目标等级对应的目标内存块容量可以大于该待分配内存。
例如,该待分配内存可以分为0级、1级、…、6级,共7个等级,0级对应的目标内存块容量为Q字节,1级对应的目标内存块容量为2Q字节,…6级对应的目标内存块容量为7Q字节。若该待分配内存的目标等级为1级,那么与该待分配内存的目标等级对应的目标内存块容量就为2Q字节。其中,该Q可以为大于0的任意实数。
这样,可以根据该待分配内存的等级,确定存储该待存储数据的大小,以准确地确定需要的目标内存块的容量,就可以避免出现分配的用于存储该待存储数据的内存过大的情况,可以减少内存碎片的产生。
步骤1006:根据该目标内存块容量,从内存中确定与该目标内存块容量匹配的至少一个空内存块。
可选地,可以通过遍历内存查找与该目标内存块容量匹配的至少一个空内存块,也可以通过调用Malloc函数开辟至少一个与该目标内存块容量匹配的空内存块。本申请实施例对此不作限定。
这样,可以准确地确定该空内存块的容量,这样,就可以避免出现确定的空内存块过大的情况,可以减少内存碎片的产生。
步骤1007:建立该目标等级对应的目标链表,将该目标链表的各指针分别指向与该目标内存块容量匹配的各空内存块,并且,将该目标链表的链表头指向与该目标内存块容量匹配的各空内存块中的首个空内存块。
值得说明的是,通过根据该待分配内存的目标等级,确定该目标等级对应的目标内存块容量,再从内存中确定与该目标内存块容量匹配的至少一个空内存块,最后以该至少一个空内存块建立与该目标等级对应的目标链表。这样,可以提高建立的与各目标等级对应的目标链表中的内存块的容量的准确性。如此,可以减少内存碎片的产生,进而可以达到提升内存分配的效率的效果。
一种可能的实现方式中,参见图5,根据待存储数据的长度确定待分配内存的目标等级,包括:
步骤1008:对该长度的值与预设长度值进行求和,得到待分配值。
可选地,该长度的值可以是该待存储数据的长度。
可选地,该预设长度值可以是该预设长度的内存单元的长度值,也可以是由其他规则设置的长度值。本申请实施例对此不做限定。
由于将该待存储数据的长度存储到了该目标内存块的起始位置开始的预设长度的内存单元中,那么实际存储在该目标内存块的数据就是该待存储数据和该待存储数据的长度。那么,对该长度的值与预设长度值进行求和,这样,就可以避免出现分配的目标内存块的容量不足以存储该待存储数据和该待存储数据的长度的情况。如此,可以降低内存分配的错误率,并提高内存分配的效率。
步骤1009:根据该待分配值和该内存块链表的阶梯值,确定该待分配内存的目标等级。
可选地,该阶梯值为两个相邻等级的该内存块链表的最大存储阈值的差值。也就是说,任一内存块链表中的内存块的最大存储阈值与相邻等级的内存块链表中的内存块的最大存储阈值的差值为该阶梯值。
例如,该内存块链表可以分为0级、1级、…、6级,共7个等级,0级对应的内存块链表的最大存储阈值为P字节,1级对应的内存块链表的最大存储阈值为2P字节,…6级对应的内存块链表的最大存储阈值为7P字节,那么,该阶梯值就为P。其中,该P可以为大于0的任意实数。
这样,可以避免出现分配的目标内存块的容量不足以存储该待存储数据和该待存储数据的长度的情况。如此,可以降低内存分配的错误率,并提高内存分配的效率。
一种可能的实现方式中,参见图6,根据该待分配值和该内存块链表的阶梯值,确定该待分配内存的目标等级,包括:
步骤1010:确定该待分配值与该阶梯值的目标比值。
步骤1011:将该目标比值对应的内存等级作为该待分配内存的目标等级。
进一步地,该确定该待分配值与该阶梯值的目标比值,包括:
若该待分配值与该阶梯值的初始比值为非整数,则对该初始比值取整,得到该目标比值。
例如,将该阶梯值设置为8,该待存储数据的长度的值为10,该预设长度值为4,那么该待分配值就为14,那么确定该初始比值为1.8,则对该初始比值取整,得到该目标比值为1,就可以确定该待分配内存的目标等级为1。
值得注意的是,通过确定该待分配值与该阶梯值的目标比值,并将该目标比值对应的内存等级作为该待分配内存的目标等级,这样,可以确保与该目标等级对应的目标内存块容量大于该待存储数据和该待存储数据的长度,就可以避免出现分配的目标内存块的容量不足以存储该待存储数据和该待存储数据的长度的情况。如此,可以降低内存分配的错误率,并提高内存分配的效率。
一种可能的实现方式中,参见图7,在根据内存分配指令将该待存储数据存储至该目标内存块之后,该方法还包括:
步骤1012:根据针对该目标内存块的内存释放指令,删除该目标内存块中所存储的数据。
可选地,该内存释放指令可以是提前设置的由特定条件触发的指令,也可以是根据实际需要实时输入的指令。本申请实施例对此不做限定。
可选地,删除该目标内存块中所存储的数据可以是删除该目标内存块中所存储的数据的长度的值,也可以是删除该目标内存块中所存储的数据,还可以是删除该目标内存块中所存储的数据和该数据的长度的值。
步骤1013:更新该目标链表,以使得该目标内存块作为空内存块插入该目标链表中。
可选地,该目标内存块可以作为空内存块插入该目标链表的头部,也可以插入该目标链表的其他位置。本申请实施例对此不作限定。
进一步地,更新该目标链表,包括:
将该目标链表的链表头指向该目标内存块。
可选地,更新该目标链表的操作具体还可以是:将该目标内存块插入该目标链表的头部,并且将一指针从该目标内存块指向下一个内存块。
值得说明的是,根据针对该目标内存块的内存释放指令,删除该目标内存块中所存储的数据,然后将删除所存储的数据的内存块插入该目标链表的头部即可完成内存释放,这样,可以有效提升内存释放的效率。
一种可能的实现方式中,参见图8,该方法还包括:
步骤1014:确定该目标链表中的空内存块的个数。
可选地,可以在每间隔一定的时间之后确定一次该目标链表中的空内存块的个数,也可以在该目标链表中的空内存块的个数发生变化的情况下就确定一次该目标链表中的空内存块的个数。本申请实施例对此不作限定。
步骤1015:若该目标链表中的空内存块的个数大于或等于预设阈值,则释放依次排列在该目标链表中的至少一个空内存块。
可选地,该预设阈值可以根据实际需要进行设置,比如可以将该预设阈值设置为10。
可选地,释放就是将驻留在内存块中的数据从内存块中释放出来的内存释放操作。一般地,内存释放就是将内存块中存储的数据全部清零,并且在进行内存释放之后,需要将内存块中的指针置为零。
可选地,可以从依次排列在该目标链表中的第一个空内存块开始进行释放,并且可以连续释放预设数目的空内存块,也可以连续释放空内存块直至该目标链表中的空内存块的个数小于该预设阈值。
值得说明的是,在该目标链表中的空内存块的个数大于或等于预设阈值的情况下,释放该目标链表头部的至少一个空内存块,这样就可以避免出现一个目标等级对应的内存块链表中的空闲的空内存块过多的情况,便于其他目标等级对应的内存块链表从内存堆栈中开辟新的内存块,并且,因为该目标链表为单向链表,访问该目标链表的第一个内存块的速度很快,所以释放依次排列在该目标链表中的内存块可以提高释放内存块的效率。如此,可以有效提升内存释放和内存分配的效率。
一种可能的实现方式中,根据该链表头确定目标内存块,包括:
确定该目标链表的头节点,并根据该目标链表的头节点确定该目标链表的该链表头。
可选地,该目标链表的头节点可以是在该目标链表的第一个节点之前附设的一个节点。
示例性地,该头节点的指针域可以存储指向该目标链表的第一个节点的指针,也就是说该头节点可以用于指示各指针指向的第一个内存块的位置,也即是可以用于指示该链表头指向的内存块的位置。另外,该头节点的数据域可以不存储任何信息,该头节点的数据域也可以存储该目标链表的长度、该目标链表中存在的空内存块的数量等附加信息。
进一步地,确定该目标链表的头节点,并根据该目标链表的头节点确定该目标链表的该链表头的操作可以是:遍历所有的链表的头节点,直至找到该目标链表的头节点。
读取该目标链表的头节点的指针域中存储的信息,以确定该目标链表的该链表头。这样,就可以确定该目标链表的第一个节点,也就可以确定该目标链表的首个空内存块的地址。
将该链表头指向的内存块作为该目标内存块。
这样,就可以准确地、快速地确定该目标内存块,进而可以提高内存分配的效率和准确性。
下面,通过图9来对本申请实施例提供的内存分配方法举例,以进行详细的解释。
示例性地,图9提供了一种内存分配方法的流程图,参见图9,该方法包括:
步骤2001:对该长度的值与该预设长度值进行求和,得到该待分配值。
可选地,该长度的值可以是该待存储数据的长度。
可选地,该预设长度值可以是该预设长度的内存单元的长度值,也可以是由其他规则设置的长度值。本申请实施例对此不做限定。
这样,可以避免出现分配的目标内存块的容量不足以存储该待存储数据和该待存储数据的长度的情况。如此,可以降低内存分配的错误率,并提高内存分配的效率。
步骤2002:确定该待分配值与该阶梯值的目标比值。
步骤2003:将该目标比值对应的内存等级作为该待分配内存的该目标等级。
进一步地,该确定该待分配值与该阶梯值的目标比值,包括:
若该待分配值与该阶梯值的初始比值为非整数,则对该初始比值取整,得到该目标比值。
这样,可以确保与该目标等级对应的目标内存块容量大于该待存储数据和该待存储数据的长度,就可以避免出现分配的目标内存块的容量不足以存储该待存储数据和该待存储数据的长度的情况。
步骤2004:根据该待分配内存的目标等级,确定该目标等级对应的目标内存块容量。
可选地,与该目标等级对应的目标内存块容量可以大于该待分配内存。
这样,可以根据该待分配内存的等级,确定存储该待存储数据的大小,以准确地确定需要的目标内存块的容量。
步骤2005:根据该目标内存块容量,从内存中确定与该目标内存块容量匹配的至少一个空内存块。
可选地,可以通过遍历内存查找与该目标内存块容量匹配的至少一个空内存块,也可以通过调用Malloc函数开辟至少一个与该目标内存块容量匹配的空内存块。本申请实施例对此不作限定。
这样,可以准确地确定该空内存块的容量,这样,就可以避免出现确定的空内存块过大的情况,可以减少内存碎片的产生。
步骤2006:建立该目标等级对应的目标链表,将该目标链表的各指针分别指向与该目标内存块容量匹配的各空内存块,并且将该目标链表的链表头指向与该目标内存块容量匹配的各空内存块中的首个空内存块。
这样,可以提高建立的与各目标等级对应的目标链表中的内存块的容量的准确性。
步骤2007:根据待分配内存的该目标等级,确定与该目标等级对应的目标链表。
例如,该待分配内存可以分为0级、1级、…、6级,共7个等级,那么内存链表也可与分为0级、1级、…、6级,共7个等级。若该待分配内存的等级为1级,那么与该待分配内存的等级对应的目标链表就可以为2级的内存链表。本申请实施例对此不做限定。
可选地,该目标链表包括至少一个指针和链表头,各指针分别指向一个内存块,且各指针所指向的内存块的容量相同。
可选地,该指针用于指示在该目标链表中的下一个内存块的地址。
可选地,该链表头指向各指针所指向的内存块中的首个空内存块。
可选地,该链表头可以是各指针中的第一个指针。
这样,可以准确地确定存储该待存储数据所需要的内存块的容量,也就可以避免出现分配的用于存储该待存储数据的内存过大的情况。如此,可以减少内存碎片的产生,进而可以达到提升内存分配的效率的效果。
步骤2008:确定该链表头指向的目标内存块。
可选地,该目标内存块可以是该目标链表中各指针指向的第一个内存块。
步骤2009:根据内存分配指令将该待存储数据存储至该链表头指向的目标内存块,并将该链表头指向该目标内存块之后的首个空内存块。
可选地,该目标内存块之后的首个空内存块可以是在将该待存储数据存储至该链表头指向的目标内存块之前,在该目标链表中各指针所指向的内存块中的第二个空内存块。
通过将该待存储数据存储至该链表头指向的目标内存块,就可以将该待存储数据存入与该目标等级对应的该目标链表中的内存块,这样就可以减少内存碎片的产生。并通过将该链表头指向该目标内存块之后的首个空内存块,这样,再下一次需要将待存储数据存入与该目标链表中的内存块的时候,就可以直接存入该目标链表的首个空内存块。
步骤2010:根据针对该目标内存块的内存释放指令,删除该目标内存块中所存储的数据。
可选地,该内存释放指令可以是提前设置的由特定条件触发的指令,也可以是根据实际需要实时输入的指令。本申请实施例对此不做限定。
步骤2011:更新该目标链表,以使得该目标内存块作为空内存块插入该目标链表中。
可选地,该目标内存块可以作为空内存块插入该目标链表的头部,也可以插入该目标链表的其他位置。本申请实施例对此不作限定。
进一步地,更新该目标链表,包括:
将该目标链表的链表头指向该目标内存块。
可选地,更新该目标链表的操作具体还可以是:将该目标内存块插入该目标链表的头部,并且将一指针从该目标内存块指向下一个内存块。
值得说明的是,根据针对该目标内存块的内存释放指令,删除该目标内存块中所存储的数据,然后将删除所存储的数据的内存块插入该目标链表的头部即可完成内存释放,这样,可以有效提升内存释放的效率。
步骤2012:确定该目标链表中的空内存块的个数。
可选地,可以在每间隔一定的时间之后确定一次该目标链表中的空内存块的个数,也可以在该目标链表中的空内存块的个数发生变化的情况下就确定一次该目标链表中的空内存块的个数。
步骤2013:若该目标链表中的空内存块的个数大于或等于该预设阈值,则释放依次排列在该目标链表中的至少一个空内存块。
可选地,可以从依次排列在该目标链表中的第一个空内存块开始进行释放,并且可以连续释放预设数目的空内存块,也可以连续释放空内存块直至该目标链表中的空内存块的个数小于该预设阈值。
下述对用以执行的本申请所提供内存分配方法的装置、设备及计算机可读存储介质等进行说明,其具体的实现过程以及技术效果参见上述,下述不再赘述。
图10是本申请实施例提供的一种内存分配装置的结构示意图,参见图10,该装置包括:
第一确定模块301,用于根据待存储数据的长度确定待分配内存的目标等级。
第二确定模块302,用于根据该待分配内存的目标等级,确定该目标等级对应的目标链表。
第三确定模块303,用于根据该链表头确定目标内存块;
存储处理模块304,用于根据内存分配指令将该待存储数据存储至该目标内存块,并将该链表头指向该目标内存块之后的首个空内存块。
可选地,第二确定模块302还用于将该待存储数据的长度存储至该目标内存块的起始位置开始的预设长度的内存单元中;
将该待存储数据存储至该预设长度的内存单元之后的内存单元中。
可选地,第二确定模块302还用于根据该待分配内存的目标等级,确定该目标等级对应的目标内存块容量。
根据该目标内存块容量,从内存中确定与该目标内存块容量匹配的至少一个空内存块。
建立该目标等级对应的目标链表,将该目标链表的各指针分别指向与该目标内存块容量匹配的各空内存块,并且,将该目标链表的链表头指向与该目标内存块容量匹配的各空内存块中的首个空内存块。
可选地,第一确定模块301还用于对该长度的值与预设长度值进行求和,得到待分配值。
根据该待分配值和该内存块链表的阶梯值,确定该待分配内存的目标等级。
可选地,第一确定模块301还用于确定该待分配值与该阶梯值的目标比值。
将该目标比值对应的内存等级作为该待分配内存的目标等级。
可选地,第一确定模块301还用于对该初始比值取整,得到该目标比值。
可选地,该装置还包括删除模块和更新模块。
该删除模块用于根据针对该目标内存块的内存释放指令,删除该目标内存块中所存储的数据。
该更新模块用于更新该目标链表,以使得该目标内存块作为空内存块插入该目标链表中。
上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器,或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(Central Processing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
图11是本申请实施例提供的一种计算机设备的结构示意图。参见图11,计算机设备400包括:存储器401、处理器402,存储器401中存储有可在处理器402上运行的计算机程序,处理器402执行计算机程序时,实现上述任意各个方法实施例中的步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时可实现上述各个方法实施例中的步骤。
可选地,本申请还提供一种程序产品,例如计算机可读存储介质,包括程序,该程序在被处理器执行时用于执行上述任一界面图像渲染方法实施例。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (14)

1.一种内存分配方法,其特征在于,包括:
根据待存储数据的长度确定待分配内存的目标等级;
根据所述待分配内存的目标等级,确定与所述目标等级对应的目标链表,所述目标链表包括至少一个指针和链表头,各指针分别指向一内存块,各指针用于指示所述目标链表中的各内存块的地址,所述链表头为各指针中的第一个指针,所述链表头用于指向所述目标链表中的各内存块中的首个空内存块;
根据所述链表头确定目标内存块;
根据内存分配指令将所述待存储数据存储至所述目标内存块,并将所述链表头指向所述目标内存块之后的首个空内存块。
2.如权利要求1所述的内存分配方法,其特征在于,所述根据内存分配指令将所述待存储数据存储至所述链表头指向的目标内存块,包括:
根据所述内存分配指令将所述待存储数据的长度存储至所述目标内存块的起始位置开始的预设长度的内存单元中;
将所述待存储数据存储至所述预设长度的内存单元之后的内存单元中。
3.如权利要求1所述的内存分配方法,其特征在于,所述根据所述待分配内存的目标等级,确定所述目标等级对应的目标链表之前,还包括:
根据所述待分配内存的目标等级,确定所述目标等级对应的目标内存块容量;
根据所述目标内存块容量,从内存中确定与所述目标内存块容量匹配的至少一个空内存块;
建立所述目标等级对应的目标链表,将所述目标链表的各指针分别指向与所述目标内存块容量匹配的各空内存块,并且,将所述目标链表的链表头指向与所述目标内存块容量匹配的各空内存块中的首个空内存块。
4.如权利要求3所述的内存分配方法,其特征在于,所述根据待存储数据的长度确定待分配内存的目标等级,包括:
对所述长度的值与预设长度值进行求和,得到待分配值;
根据所述待分配值和内存块链表的阶梯值,确定所述待分配内存的目标等级,其中,所述阶梯值为两个相邻等级的所述内存块链表的最大存储阈值的差值。
5.如权利要求4所述的内存分配方法,其特征在于,所述根据所述待分配值和内存块链表的阶梯值,确定所述待分配内存的目标等级,包括:
确定所述待分配值与所述阶梯值的目标比值;
将所述目标比值对应的内存等级作为所述待分配内存的目标等级。
6.如权利要求5所述的内存分配方法,其特征在于,所述确定所述待分配值与所述阶梯值的目标比值,包括:
若所述待分配值与所述阶梯值的初始比值为非整数,则对所述初始比值取整,得到所述目标比值。
7.如权利要求1-6任一项所述的内存分配方法,其特征在于,所述根据内存分配指令将所述待存储数据存储至所述目标内存块之后,所述方法还包括:
根据针对所述目标内存块的内存释放指令,删除所述目标内存块中所存储的数据;
更新所述目标链表,以使得所述目标内存块作为空内存块插入所述目标链表中。
8.如权利要求7所述的内存分配方法,其特征在于,所述更新所述目标链表,包括:
将所述目标链表的链表头指向所述目标内存块。
9.如权利要求1-6任一项所述的内存分配方法,其特征在于,所述方法还包括:
确定所述目标链表中的空内存块的个数;
若所述目标链表中的空内存块的个数大于或等于预设阈值,则释放依次排列在所述目标链表中的至少一个空内存块。
10.如权利要求1-6任一项所述的内存分配方法,其特征在于,所述方法还包括:
若所述目标链表为空,则开辟多个内存块,并将所述多个内存块中的一个内存块作为所述目标内存块;
将所述多个内存块中的其它内存块插入所述目标链表。
11.如权利要求1-6任一项所述的内存分配方法,其特征在于,所述根据所述链表头确定目标内存块,包括:
确定所述目标链表的头节点,并根据所述目标链表的头节点确定所述目标链表的所述链表头;
将所述链表头指向的内存块作为所述目标内存块。
12.一种内存分配装置,其特征在于,所述装置包括:
第一确定模块,用于根据待存储数据的长度确定待分配内存的目标等级;
第二确定模块,用于根据所述待分配内存的目标等级,确定所述目标等级对应的目标链表;
第三确定模块,用于根据链表头确定目标内存块;
存储处理模块,用于根据内存分配指令将所述待存储数据存储至所述目标内存块,并将所述链表头指向所述目标内存块之后的首个空内存块。
13.一种计算机设备,其特征在于,包括:存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现上述权利要求1至11任一项所述的方法的步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现权利要求1至11中任一项所述方法的步骤。
CN202210082263.6A 2022-01-24 2022-01-24 内存分配方法、装置、计算机设备和计算机可读存储介质 Pending CN114490060A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210082263.6A CN114490060A (zh) 2022-01-24 2022-01-24 内存分配方法、装置、计算机设备和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210082263.6A CN114490060A (zh) 2022-01-24 2022-01-24 内存分配方法、装置、计算机设备和计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN114490060A true CN114490060A (zh) 2022-05-13

Family

ID=81475497

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210082263.6A Pending CN114490060A (zh) 2022-01-24 2022-01-24 内存分配方法、装置、计算机设备和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN114490060A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115933994A (zh) * 2023-01-09 2023-04-07 苏州浪潮智能科技有限公司 一种数据处理方法、装置、电子设备及存储介质
CN117032995A (zh) * 2023-10-08 2023-11-10 苏州元脑智能科技有限公司 内存池管理方法、装置、计算机设备和存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115933994A (zh) * 2023-01-09 2023-04-07 苏州浪潮智能科技有限公司 一种数据处理方法、装置、电子设备及存储介质
CN117032995A (zh) * 2023-10-08 2023-11-10 苏州元脑智能科技有限公司 内存池管理方法、装置、计算机设备和存储介质

Similar Documents

Publication Publication Date Title
US7725437B2 (en) Providing an index for a data store
US8463787B2 (en) Storing nodes representing respective chunks of files in a data store
US5664179A (en) Modified skip list database structure and method for access
CN111444196B (zh) 块链式账本中全局状态的哈希的生成方法、装置及设备
CN110147204B (zh) 一种元数据落盘方法、装置、系统及计算机可读存储介质
CN114490060A (zh) 内存分配方法、装置、计算机设备和计算机可读存储介质
CN106980665B (zh) 数据字典实现方法、装置及数据字典管理系统
CN111190904B (zh) 一种图-关系数据库混合存储的方法和装置
CN105320775A (zh) 数据的存取方法和装置
CN112287182A (zh) 图数据存储、处理方法、装置及计算机存储介质
CN111444192B (zh) 块链式账本中全局状态的哈希的生成方法、装置及设备
CN111339078A (zh) 数据实时存储方法、数据查询方法、装置、设备、介质
CN110347651A (zh) 基于云存储的数据同步方法、装置、设备及存储介质
CN104584524A (zh) 聚合中介系统中的数据
CN114064984B (zh) 一种基于稀疏数组链表的世界状态增量更新方法及装置
CN113961153B (zh) 一种索引数据写入磁盘的方法、装置及终端设备
CN115878027A (zh) 一种存储对象的处理方法、装置、终端及存储介质
CN115964002B (zh) 一种电能表终端档案管理方法、装置、设备及介质
CN111625617A (zh) 一种数据索引方法、装置及计算机可读存储介质
CN107315806B (zh) 一种基于文件系统的嵌入式存储方法和装置
CN114691612A (zh) 数据写入方法及装置、数据读取方法及装置
CN108073712B (zh) 信息系统中的主数据删除方法、装置和计算机设备
CN117009439B (zh) 数据处理方法、装置、电子设备及存储介质
CN118012826A (zh) 一种数据查询方法及相关装置
CN116664129B (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