CN116719753A - 数据处理设备、数据处理方法和计算机可读存储介质 - Google Patents

数据处理设备、数据处理方法和计算机可读存储介质 Download PDF

Info

Publication number
CN116719753A
CN116719753A CN202310478278.9A CN202310478278A CN116719753A CN 116719753 A CN116719753 A CN 116719753A CN 202310478278 A CN202310478278 A CN 202310478278A CN 116719753 A CN116719753 A CN 116719753A
Authority
CN
China
Prior art keywords
data
idle
stored
area
current
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
CN202310478278.9A
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.)
Beijing Eswin Computing Technology Co Ltd
Original Assignee
Beijing Eswin Computing 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 Beijing Eswin Computing Technology Co Ltd filed Critical Beijing Eswin Computing Technology Co Ltd
Priority to CN202310478278.9A priority Critical patent/CN116719753A/zh
Publication of CN116719753A publication Critical patent/CN116719753A/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
    • 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
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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示出了根据本公开实施例的内存初始化的示意图;
图3A示出了根据本公开实施例的内存分配的示意图;
图3B示出了根据本公开实施例的第一分配内存块的示意图;
图4A示出了根据本公开另一实施例的内存分配的示意图;
图4B示出了根据本公开实施例的内存释放的示意图;
图5A示出了根据本公开另一实施例的内存分配的示意图;
图5B示出了根据本公开另一实施例的内存释放的示意图
图6A示出了根据本公开另一实施例的内存分配的示意图;
图6B示出了根据本公开另一实施例的内存分配的示意图;
图7示出了根据本公开实施例的数据处理方法的流程图;以及
图8示意性示出了根据本公开实施例的适于实现数据处理方法的电子设备的方框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部。基于所描述的本公开实施例,本领域普通技术人员在无需创造性劳动的前提下获得的所有其他实施例都属于本公开保护的范围。在以下描述中,一些具体实施例仅用于描述目的,而不应该理解为对本公开有任何限制,而只是本公开实施例的示例。
除非另外定义,本公开实施例使用的技术术语或科学术语应当是本领域技术人员所理解的通常意义。本公开实施例中使用的“第一”、“第二”以及类似词语并不表示任何顺序、数量或重要性,而只是用于区分不同的组成部分。
本公开实施例提供了一种数据处理设备,包括:内存;以及处理器,配置为:在确定待存储数据具有第一属性的情况下,以内存的当前空闲区域中的第一边界地址为起始地址,将待存储数据依次写入当前空闲区域;以及在确定待存储数据具有第二属性的情况下,以内存的当前空闲区域中的第二边界地址为起始地址,将待存储数据依次写入当前空闲区域;其中,第一属性指示了待存储数据的内存占用时长小于预设时长,第二属性指示了待存储数据的内存占用时间大于或等于预设时长。
下面,将参照附图详细描述根据本公开的各个实施例。
图1示出了根据本公开实施例的数据处理设备的结构示意图。
如图1所示,数据处理设备100包括内存110和处理器120。
在本公开实施例中,内存110可以存储应用程序产生的相关数据。例如,内存110可以存储应用程序的运行数据和应用程序的属性数据。例如,运行数据可以是应用程序在运行时产生的,运行数据可以是临时数据。例如,属性数据可以是描述应用程序运行属性的参数,属性参数可以是长期有效的数据。
在应用程序产生相关数据时,处理器120可以为相关数据申请内存110的存储空间,并将相关数据可以存储在内存的存储空间中。
在本公开实施例中,在确定待存储数据具有第一属性的情况下,处理器120以内存110的当前空闲区域中的第一边界地址为起始地址,将待存储数据依次写入当前空闲区域。在确定待存储数据具有第二属性的情况下,处理器120以内存110的当前空闲区域中的第二边界地址为起始地址,将待存储数据依次写入当前空闲区域。第一属性指示了待存储数据的内存占用时长小于预设时长,第二属性指示了待存储数据的内存占用时间大于或等于预设时长。
例如,内存110的当前空闲区域可以为内存110中未被占用的区域。
例如,第一边界地址可以为内存110的当前空闲区域的地址范围内的最低地址,此时第二边界地址可以为内存110的当前空闲区域的地址范围内的最高地址。例如,第一边界地址还可以为内存110的当前空闲区域的地址范围内的最高地址,此时第二边界地址可以为内存110的当前空闲区域的地址范围内的最低地址。
例如,预设时长可以为24小时。具有第一属性的数据被写入内存110后,占用内存110的时长预计小于24小时。例如,具有第一属性的数据可以为要临时存储的应用程序的运行数据。具有第二属性的数据被写入内存110后,占用内存110的时长预计大于或等于24小时。例如,具有第二属性的数据可以为要被长期存储的应用程序的属性数据。
例如,在确定待存储数据的内存占用时长小于24小时的情况下,处理器120可以从内存110的当前空闲区域的最低地址写入待存储数据。例如,待存储数据被从最低地址向最高地址的方向写入。
例如,在确定待存储数据的内存占用时长大于或等于24小时的情况下,处理器120可以从内存110的当前空闲区域的最高地址写入待存储数据。例如,待存储数据被从最高地址向最低地址的方向写入。
在本公开实施例中,本公开对具有第一属性的数据的写入内存的边界地址不做限定,具有第一属性的数据可以从最低地址被写入,也可以从最高地址被写入。本公开对具有第二属性的数据的写入内存的边界地址不做限定,具有第二属性的数据可以从最低地址被写入,也可以从最高地址被写入。需要说明的是,在确定从内存110的当前空闲区域的最低地址写入具有第一属性的数据的情况下,从内存110的当前空闲区域的最高地址为起始地址,依次写入具有第二属性的数据。在确定从内存110的当前空闲区域的最高地址写入具有第一属性的数据的情况下,从内存110的当前空闲区域的最低地址为起始地址,依次写入具有第二属性的数据。
在本公开实施例中,待存储数据的属性可以通过内存标识表示,内存标识用于表征待存储数据的优先级,优先级与待存储数据占用内存的时长对应。例如,内存标识可以利用二值变量表示,内存标识表征的优先级可以为0或1。例如,在确定待存储数据的内存标识为0的情况下,待存储数据的优先级为0,该待存储数据占用内存的时长小于预设时长。在确定待存储数据的内存标识为1的情况下,待存储数据的优先级为1,该待存储数据要占用内存的时长大于或等于预设时长。
根据本公开实施例,根据数据占用内存时长的属性,确定具有不同属性的数据的写入地址。通过将内存占用时长不同的数据分别从内存的两端写入,可以将占用内存时长较短的数据和占用内存时长较长的数据分别集中存储,这使得占用内存时长较短的数据占用的内存空间被释放后,可以在再次被集中利用,从而提高内存的使用效率。
在本公开实施例中,第一属性还可以指示待存储数据的有效期小于预设时长,第二属性还可以指示待存储数据的有效期大于或等于预设时长。例如,在确定内存110存储的数据已经过期的情况下,处理器120可以删除内存110内的该数据,并将该数据占用的内存区域释放,以存储新的数据。通过本公开实施例,分别以内存的两端为起始地址写入有效期不同的数据,可以将有效期较短的数据和有效期较长的数据分别集中存储,这使得有效期较短的数据占用的内存空间被释放后,可以再次被集中利用,从而提高内存的使用效率。
图2示出了根据本公开实施例的内存初始化的示意图。
在本公开实施例中,在将待存储数据写入内存之前,处理器对内存进行初始化。图2示出了内存初始化阶段,处理器在内存200中构建的第一空闲链表和第二空闲链表。
例如,处理器确定内存200的地址范围和存储容量;以地址范围中的第一边界地址为起始地址构建第一链表头,以及以地址范围中的第二边界地址为起始地址构建第二链表头;以及根据存储容量、第一链表头占用的内存数据量和第二链表头占用的内存数据量,确定内存的当前空闲区域。
在本公开实施例中,第一链表头与当前空闲区域的地址范围关联,以形成当前第一空闲链表。第二链表头与当前空闲区域的地址范围关联,以形成当前第二空闲链表。
在本公开实施例中,处理器可以将内存200的地址范围划分为多个子区域,形成多个内存块。例如,如图2所示,第一内存块210可以表征第一链表头在内存200中占用的地址范围,第二内存块220可以表征第二链表头在内存200中占用的地址范围,空闲内存块230可以表征内存200的当前空闲区域在内存中占用的地址范围。
例如,第一内存块210与空闲内存块230关联,可以形成当前第一空闲链表。第一空闲链表可以指示内存200中可以存储第一属性数据的地址范围。第二内存块220与空闲内存块230关联,可以形成当前第二空闲链表。第二空闲链表可以指示内存200中可以存储第二属性数据的地址范围。
在第一空闲链表中,第一内存块210与空闲内存块230可以为第一空闲链表的两个结点。此时,第一内存块210为第一空闲链表的首结点,空闲内存块230为第一空闲链表的末结点,第一内存块210可以通过指针链接空闲内存块230的起始地址。第一内存块210内的第一链表头包括地址参数mPtr1和存储容量参数mSize1,地址参数mPtr1指示第一内存块210链接的空闲内存块230的起始地址,存储容量参数mSize1指示空闲内存块230的存储容量。
在第二空闲链表中,第二内存块220与空闲内存块230可以为第二空闲链表的两个结点。此时,第二内存块220为第二空闲链表的首结点,空闲内存块230为第二空闲链表的末结点,第二内存块220可以通过指针链接空闲内存块230的起始地址。第二内存块220内的第二链表头包括地址参数mPtr2和存储容量参数mSize2,地址参数mPtr2指示第二内存块220链接的空闲内存块230的起始地址,存储容量参数mSize2指示空闲内存块230的存储容量。
空闲内存块230包括地址参数mPtr、存储容量参数mSize和有效存储区域231。由于空闲内存块230为链表的末结点,地址参数mPtr的指向为空。存储容量参数mSize指示空闲内存块230内有效存储区域231的存储容量。有效存储区域231表示空闲内存块230内可以存储数据的区域,地址参数mPtr和存储容量参数mSize占用的区域可以为空闲内存块230的不可用存储区域。
在本公开实施例中,第一空闲链表和第二空闲链表可以共享相同的空闲内存块230,第一空闲链表和第二空闲链表分别通过存储容量参数mSize1和存储容量参数mSize2表示有效存储区域231的存储容量。第一属性数据和第二属性数据可以写入至空闲内存块230的有效存储区域231内。
例如,在确定待存储数据的内存占用时长小于预设时长的情况下,处理器可以以有效存储区域231的最低地址为起始地址,依次写入待存储数据。例如,第一链表头位于内存200地址范围中的最低地址处,从有效存储区域231的最低地址向最高地址的方向依次写入待存储数据,例如从图2所示的由L至H方向写入待存储数据。
例如,在确定待存储数据的内存占用时长大于或等于预设时长的情况下,处理器可以以有效存储区域231的最高地址为起始地址,依次写入待存储数据。例如,第二链表头位于内存200地址范围中的最高地址处,从有效存储区域231的最高地址向最低地址的方向依次写入待存储数据,例如从图2所述的由H至L方向依次写入待存储数据。
根据本公开实施例,利用两个链表分别表示可被用于存储具有对应属性的数据的有效存储区域,可以实现对内存空间中不同区域的灵活分配。
图3A示出了根据本公开实施例的内存分配的示意图。
在本公开实施例中,基于内存分配请求,处理器为待存储数据在初始化后的内存中申请存储区域。结合图2和图3A对内存的分配过程进行示意性说明。图2示出了初始化后内存中未写入数据的空闲内存块。图3A示出了内存分配阶段,处理器在内存300a中为待存储数据划分的第一分配内存块340和第二分配内存块350。
例如,对于具有第一属性的待存储数据,在确定待存储数据的数据量小于或等于当前空闲区域的存储容量的情况下,处理器以当前空闲区域的第一边界地址为起始地址,在当前空闲区域中为待存储数据分配第一子区域,第一子区域的存储容量与数据量一致。处理器将待存储数据写入第一子区域,此时第一子区域的地址范围与第一链表头相关联,形成当前第一分配链表。
在本公开实施例中,第一内存块310和第二内存块320与图2所示的第一内存块210和第二内存块220类似。为了简明,本公开在此处不再赘述。
例如,处理器可以扫描图2所示的第一空闲链表,从第一空闲链表中查找可以存储具有第一属性的待存储数据的空闲区域,例如图2所示的有效存储区域231。例如,在确定待存储数据的数据量与有效存储区域231的存储容量相等的情况下,可以将有效存储区域231作为第一子区域分配给待存储数据。在确定待存储数据的数据量小于有效存储区域231的存储容量的情况下,处理器可以以有效存储区域231的最低地址为起始地址,在有效存储区域231中申请第一子区域,第一子区域的存储容量与待存储数据的数据量等。
如图3A所示,第一分配内存块340可以为第一子区域。
例如,处理器可以以第一分配内存块340的最低地址为起始地址,依次写入待存储数据。第一链表头占用的第一内存块310与第一分配内存340块关联,形成当前第一分配链表,第一分配链表可以指示内存300a中已经被存储第一属性数据的地址范围。
图3B示出了根据本公开实施例的第一分配内存块的示意图。
如图3B所示,第一分配内存块340还可以包括地址参数mPtr、存储容量参数mSize和有效存储区域341。待存储数据可以被存储在有效存储区域341内,待存储数据的数据量与有效存储区域341的存储容量相等,存储容量参数mSize指示第一分配内存块340内有效存储区域341的存储容量。由于第一分配内存块341为第一分配链表的末结点,地址参数mPtr的指向为空。
在本公开实施例中,对于具有第二属性的待存储数据,在确定待存储数据的数据量小于或等于当前空闲区域的存储容量的情况下,处理器以当前空闲区域的第二边界地址为起始地址,在当前空闲区域中为待存储数据分配第二子区域,第二子区域的存储容量与数据量一致。处理器将待存储数据写入第二子区域,此时第二子区域的地址范围与第二链表头相关联,形成当前第二分配链表。
例如,处理器通过扫描图2所示的第二空闲链表获取有效存储区域231。例如,在确定待存储数据的数据量与有效存储区域231的存储容量相等的情况下,可以将有效存储区域231作为第二子区域分配给待存储数据。在确定待存储数据的数据量小于第二空闲链表中空闲内存块的存储容量的情况下,处理器可以以有效存储区域231的最高地址为起始地址,在有效存储区域231中申请第二子区域,第二子区域的存储容量与待存储数据的数据量等。
如图3A所示,第二分配内存块350可以为第二子区域。
例如,处理器可以以第二分配内存块350的最低地址为起始地址,依次写入待存储数据。第二链表头占用的第二内存块320与第二分配内存块350关联,形成当前第二分配链表,第二分配链表可以指示内存300a中已经被存储第二属性数据的地址范围。
例如,第二分配内存块350的结构与图3B示出的第一分配内存块340的结构类似。第二分配内存块350可以包括地址参数mPtr、存储容量参数mSize和有效存储区域。待存储数据可以被存储在有效存储区域内,待存储数据的数据量与有效存储区域的存储容量相等,存储容量参数mSize指示第二分配内存块内350有效存储区域的存储容量。由于第二分配内存块为第二分配链表的末结点,地址参数mPtr的指向为空。
在本公开实施例中,处理器可以分别以图2所示的有效空闲存储区域231的两个边界地址为起始地址,为具有第一属性的数据和具有第二属性的属性申请空闲存储区域。例如,对于具有第一属性的数据,处理器均以有效空闲存储区域的最低地址为起始地址申请空闲存储区域。对于具有第二属性的数据,处理器均以有效空闲存储区域的最高地址为起始地址申请空闲存储区域。这使得具有第一属性的数据可以被集中存储在有效空闲区域的低地址区域,具有第二属性的数据可以被集中存储在有效空闲区域的高地址区域。
在本公开实施例中,处理器可以以分配内存块的最低地址为起始地址,依次写入待存储数据。处理器也可以以分配内存块的最高地址为起始地址,依次写入待存储数据。
在本公开实施例中,处理器在确定待存储数据已写入当前空闲区域的情况下,确定当前空闲区域的剩余空闲区域;以及将剩余空闲区域更新为当前空闲区域。第一链表头与更新后的当前空闲区域的地址范围相关联,形成当前第一空闲链表。第二链表头与更新后的当前空闲区域的地址范围相关联,形成当前第二空闲链表。
例如,如图3A所述,基于内存分配申请,内存的原始有效存储区域(图2所示有效存储区域231)可以被划分出第一分配内存块340和第二分配内存块350。第一分配内存块340被写入了具有第一属性的数据,第二分配内存块350被写入了具有第二属性的数据,此时原始空闲内存块(图2所示空闲内存块230)的剩余空闲区域为空闲内存块330,将空闲内存块330更新为可存储数据的当前空闲区域。
第一链表头占用的第一内存块310与空闲内存块330相关联形成当前第一空闲链表,第二链表头占用的第二内存块320与空闲内存块330相关联形成当前第二空闲链表。
空闲内存块330包括地址参数mPtr、存储容量参数mSize和有效存储区域331。由于空闲内存块330为链表的末结点,地址参数mPtr的指向为空。存储容量参数mSize指示空闲内存块330内有效存储区域331的存储容量。有效存储区域331表示空闲内存块330内可以存储数据的区域,地址参数mPtr和存储容量参数mSize占用的区域可以为空闲内存块330的不可用存储区域。
在本公开实施例中,处理器在第一链表头和第二链表头中记录当前空闲区域的第一边界地址,作为当前空闲区域的起始地址;以及在确定当前空闲区域已被更新的情况下,将更新后的当前空闲区域的起始地址写入当前第一空闲链表的第一链表头和当前第二空闲链表的第二链表头。
例如,在确定第一内存块310与空闲内存块330相关联形成当前第一空闲链表的情况下,第一内存块310的地址参数mPtr1被更新为空闲内存块330的起始地址,第一内存块310可以通过指针链接空闲内存块330的起始地址。在确定第二内存块320与空闲内存块330相关联形成当前第二空闲链表的情况下,第二内存块320的地址参数mPtr2被更新为空闲内存块330的起始地址,第二内存块320可以通过指针链接空闲内存块330的起始地址。
根据本公开实施例,利用两组链表分别表示内存的空闲区域和已存储数据的区域,可以实现对内存空间的灵活管理。通过空闲链表可以快速查找内存中可以存储数据的空闲区域,从而便于存储具有对应属性的数据。通过分配链表可以快速确定已存有具有对应属性的数据,从而便于对已存储的数据进行集中管理。
图4A示出了根据本公开另一实施例的内存分配的示意图。图4B示出了根据本公开实施例的内存释放的示意图。结合图4A和图4B对内存的释放过程进行示意性说明。
图4A示出了内存分配阶段,处理器在内存400a中为待存储数据划分的多个第一分配内存块和多个第二分配内存块。如图4A所示,内存400a包括第一内存块410、第二内存块420、空闲内存块(free memory)430、多个第一分配内存块A1_1、A1_2、A1_3和多个第二分配内存块A2_1、A2_2、A2_3。
在本公开实施例中,第一内存块410、第二内存块420和空闲内存块430分别与图3A所示的第一内存块310、第二内存块320和空闲内存块330类似。为了简明,本公开在此处不再赘述。
例如,多个第一分配内存块A1_1、A1_2、A1_3分别被写入了第一属性数据,多个第二分配内存块A2_1、A2_2、A2_3分别被写入了第二属性数据,空闲内存块430为内存400a中可存储数据的当前空闲区域。第一内存块410与空闲内存块430相关联形成当前第一空闲链表,第二内存块420与空闲内存块430相关联形成当前第二空闲链表。
在第一空闲链表中,第一内存块410的可以通过指针链接空闲内存块430的起始地址。在第一空闲链表中,第二内存块420可以通过指针链接空闲内存块430的起始地址。
在第一分配链表中,多个第一分配内存块A1_1、A1_2、A1_3和多个第二分配内存块A2_1、A2_2、A2_3的结构与图3B示出的第一分配内存块340的结构类似。为了简明,本公开在此处不再赘述。
第一分配内存块A1_3的地址参数mPtr可以指向第一分配内存块A1_2的起始地址,第一分配内存块A1_2的地址参数mPtr可以指向第一分配内存块A1_1的起始地址,第一分配内存块A1_1的地址参数mPtr可以指向第一内存块410的起始地址。第二分配内存块A2_3的地址参数mPtr可以指向第二分配内存块A2_2的起始地址,第二分配内存块A2_2的地址参数mPtr可以指向第二分配内存块A2_1的起始地址,第二分配内存块A2_1的地址参数mPtr可以指向第二内存块420的起始地址。
图4B示出了内存释放阶段内存400b的结构。处理器对图4A示出的内存400a中第一分配链表和第二分配链表内存储的部分数据进行释放后,得到图4B示出的内存400b。
如图4B所示,内存400b包括第一内存块410、第二内存块420、空闲内存块430、第二空闲子内存块F2_1、多个第一分配内存块A1_1、A1_2和多个第二分配内存块A2_1、A2_3。
在本公开实施例中,在确定当前第一分配链表包括多个第一子区域的情况下,处理器响应于接收到的内存释放请求,从多个第一子区域中确定与内存释放请求对应的至少一个目标第一子区域;将当前第一分配链表的第一链表头与至少一个目标第一子区域的地址范围解关联,并删除至少一个目标第一子区域内的数据,得到至少一个目标第一空闲子区域;以及在确定至少一个目标第一空闲子区域和当前空闲区域依次紧密相邻的情况下,合并至少一个目标第一空闲子区域与当前空闲区域,得到更新后的当前空闲区域。第一链表头与更新后的当前空闲区域的地址范围相关联,形成更新后的当前第一空闲链表。
在本公开实施例中,在确定当前第二分配链表包括多个第二子区域的情况下,处理器响应于接收到的内存释放请求,从多个第二子区域中确定与内存释放请求对应的至少一个目标第二子区域;将当前第二分配链表的第一链表头与至少一个目标第二子区域的地址范围解关联,并删除至少一个目标第二子区域内的数据,得到至少一个目标第二空闲子区域;以及在确定至少一个目标第二空闲子区域和当前空闲区域依次紧密相邻的情况下,合并至少一个目标第二空闲子区域与当前空闲区域,得到更新后的当前空闲区域。第二链表头与更新后的当前空闲区域的地址范围相关联,形成更新后的当前第二空闲链表。
例如,内存释放请求可以是应用程序发出的。例如,应用程序在接收到清除缓存的指令后,可以向处理器发出内存释放请求。此时处理器基于内存释放请求,执行内存释放操作。
例如,处理器响应于接收到内存释放请求,从图4A所示的多个第一分配内存块A1_1、A1_2、A1_3中确定与内存释放请求对应的第一分配内存块A1_2。处理器从当前第一分配链表中将第一内存块410与第一分配内存块A1_2解关联,并删除第一分配内存块A1_2内的数据,得到一个第一空闲子内存块。
第一空闲子内存块可以被挂接到第一空闲链表上,形成新的第一空闲链表。在确定第一空闲子内存块和图4A所示的空闲内存块430紧密相邻的情况下,可以将第一空闲子内存块从第一空闲链表上移除,并合并第一空闲子内存块和图4A所示的空闲内存块430,得到更新后的空闲内存块。例如,更新后的空闲内存块可以为图4B所示的空闲内存块430。例如,在确定两个内存块的地址相邻且连续的情况下,可以认为两个内存块紧密相邻。例如,两个内存块的地址范围分别为10-20和21-35,可认为该两个内存块紧密相邻。
如图4B所示,空闲内存块430可以被重新挂接到第一空闲链表上,第一内存块410与空闲内存块430相关联,形成新的第一空闲链表。
在本公开实施例中,在分配链表的某一分配内存块的存储空间被释放后,可以得到一个空闲内存块。在确定与该空闲内存块紧密相邻的内存块也是空闲内存块的情况下,可以将两个空闲内存块合并。该空闲内存块紧密相邻的内存块的地址可以位于该空闲内存块之前,也可以位于该空闲内存块之后。例如,该空闲内存块的地址为20-30,在确定起始地址为31的内存块也为空闲内存块的情况下,可以合并这两个空闲内存块,从而实现向前合并。在确定结束地址为29的内存块也为空闲内存块的情况下,可以合并这两个空闲内存块,从而实现向后合并。在确定起始地址为31的内存块和结束地址为29的内存块均为空闲内存块的情况下,可以合并这三个空闲内存块,从而实现前后合并。
在本公开实施例中,例如第一集合可以包括多个第一区域,多个第一区域包括至少一个目标第一空闲子区域和当前空闲区域。处理器从第一集合中确定至少一个第一区域组和至少一个第一独立区域,第一区域组包括紧密相邻的至少两个第一区域,第一独立区域与第一集合中的任一第一区域均不相邻;合并至少一个第一区域组中的至少两个第一区域,得到至少一个第一空闲子区域,其中至少一个第一空闲子区域和至少一个第一独立区域形成多个第一空闲子区域;将第一链表头与多个第一空闲子区域的地址范围关联,得到更新后的当前第一空闲链表,更新后的当前第一空闲链表指示了用于存储具有第一属性的待存储数据的不连续的多个第一空闲区域。
在本公开实施例中,例如第二集合可以包括多个第二区域,多个第二区域包括至少一个目标第二空闲子区域和当前空闲区域。处理器从第二集合中确定至少一个第二区域组和至少一个第二独立区域,第二区域组包括紧密相邻的至少两个第二区域,第二独立区域与第二集合中的任一第二区域均不相邻;合并至少一个第二区域组中的至少两个第二区域,得到至少一个第二空闲子区域,其中至少一个第二空闲子区域和至少一个第二独立区域形成多个第二空闲子区域;将第二链表头与多个第二空闲子区域的地址范围关联,得到更新后的当前第二空闲链表,更新后的当前第二空闲链表指示了用于存储具有第二属性的待存储数据的不连续的多个第二空闲区域。
例如,处理器响应于接收到内存释放请求,从图4A所示的多个第二分配内存块A2_1、A2_2、A2_3中确定与内存释放请求对应的第二分配内存块A2_2。处理器从当前第二分配链表中将第二内存块420与第二分配内存块A2_2解关联,并删除第二分配内存块A2_2内的数据,得到一个第二空闲子内存块。
如图4B所示,在确定第二空闲子内存块F2_1和空闲内存块430不相邻的情况下,将第二空闲子内存块F2_1作为独立内存块。因此,将第二内存块420与第二空闲子内存块F2_1以及空闲内存块430关联,得到更新后的当前第二空闲链表。
在本公开实施例中,在确定处理器删除多个第二分配内存块内的数据的情况下,可以获得多个第二空闲子内存块。在确定多个第二空闲子内存块中存在紧密相邻的多个第二空闲子内存块的情况下,紧密相邻的多个第二空闲子内存块形成第二区域组,合并紧密相邻的多个第二空闲子内存块,得到一个第二合并内存块。多个第二空闲子内存块中还存在与任一第二空闲子内存块以及空闲内存块均不相邻的第二空闲子内存块,可以认为该第二空闲子内存块为第二独立内存块。
在确定上述第二合并内存块、第二独立内存块与空闲内存块不相邻的情况下,将第一链表头占用的第二内存块、第二合并内存块、独立内存块以及空闲内存块关联,得到更新后的当前第二空闲链表。此时当前第二空闲链表中第二合并内存块、第二独立内存块以及空闲内存块的地址范围不相邻。
根据本公开实施例,对内存释放得到紧密相邻内存块进行合并,得到具有更大地址范围的内存块,从而可以实现对碎片内存的灵活使用,以及满足具有较大存储容量的内存存储需求。
图5A示出了根据本公开另一实施例的内存分配的示意图。图5B示出了根据本公开另一实施例的内存释放的示意图。结合图5A和图5B对内存的释放过程进行示意性说明。
图5A示出了内存分配阶段,内存500a的空闲内存块被全部占用。如图5A所示,内存500a包括第一内存块510、第二内存块520、第一空闲子内存块F1_1、第二空闲子内存块F2_1、多个第一分配内存块A1_1、A1_3、A1_4和多个第二分配内存块A2_1、A2_3、A2_4。第一分配内存块A1_4和第二分配内存块A2_4紧密相邻。
在本公开实施例中,第一内存块510和第二内存块520与图4A所示的第一内存块410和第二内存块420类似。为了简明,本公开在此处不再赘述。
图5B示出了内存释放阶段内存500b的结构。处理器对图5A示出的内存500a中第一配链表和第二分配链表内存储的部分数据进行释放后,得到图5B示出的内存500b。
如图5B所示,内存500b包括第一内存块510、第二内存块520、第一空闲子内存块F1_1、F1_2、第二空闲子内存块F2_1、F2_2、多个第一分配内存块A1_1、A1_3和多个第二分配内存块A2_1、A2_3。
在本公开实施例中,第一空闲链表可以指示多个不连续的空闲区域。在确定不连续的多个空闲区域的存储容量均小于待存储数据的数据量的情况下,处理器获取当前第一空闲链表包括的多个第一空闲区域和当前第二空闲链表包括的多个第二空闲区域;以及在确定多个第一空闲区域和多个第二空闲区域中存在紧密相邻的第一空闲区域和第二空闲区域的情况下,合并紧密相邻的第一空闲区域和第二空闲区域,得到第三空闲区域;在确定待存储数据的数据量小于或等于第三空闲区域的存储容量的情况下,在第三空闲区域中为待存储数据分配第三子区域;以及将待存储数据写入第三子区域。
例如,对于具有第一属性的数据,处理器扫描图5B示出的第一空闲链表,得到可以存储具有第一属性的待存储数据的多个第一空闲子内存块F1_1、F1_2。在确定多个第一空闲子内存块F1_1、F1_2的存储容量均小于待存储数据的数据量的情况下,处理器可以扫描图5B示出的第二空闲链表,得到与第一空闲子内存块F1_2紧密相邻的第二空闲子内存块F2_2。处理器可以合并第一空闲子内存块F1_2和第二空闲子内存块F2_2,得到第三空闲子内存块。
在确定第三空闲子内存的存储容量大于或等于待存储数据的数据量的情况下,在第三空闲区域中为待存储数据分配存储区域,得到第三分配内存块,并将待存储数据写入第三分配内存块。此时第三分配内存块被挂接到第一空闲链表上,与第一链表头关联,可认为第三分配内存块为第一分配内存块。
根据本公开实施例,利用两个空闲链表管理内存空闲,在确定其中一个空闲链表中的空闲区域无法容纳具有对应属性的数据的情况下,可以充分利用另一空闲链表的空闲区域,提高内存空间的利用率,避免出现由于内存中存在过多内存碎片而导致内存无法分配的现象。
图6A示出了根据本公开另一实施例的内存分配的示意图。图6B示出了根据本公开另一实施例的内存分配的示意图。结合图6A和图6B对内存的分配过程进行示意性说明。图6B示出了处理器将具有第一属性的待存储数据写入图6A所示的第二空闲子内存块F2_1时的内存600b。
在本公开实施例中,对于具有第一属性的待存储数据,在确定多个第一空闲区域和多个第二空闲区域中不存在相邻的第一空闲区域和第二空闲区域的情况下或者确定待存储数据的数据量大于第三空闲区域的存储容量的情况下,处理器获取多个第二空闲区域。在确定多个第二空闲区域中存在存储容量大于或等于待存储数据的数据量的第二空闲区域的情况下,处理器在第二空闲区域中为待存储数据分配第二子区域,并将待存储数据写入第二子区域。在确定将具有第一属性的待存储数据写入第二子区域的情况下,处理器还将待存储数据的第一属性修改为第二属性。
在本公开实施例中,对于具有第二属性的待存储数据,在确定多个第一空闲区域和多个第二空闲区域中不存在相邻的第一空闲区域和第二空闲区域的情况下或者确定待存储数据的数据量大于第三空闲区域的存储容量的情况下,处理器获取多个第一空闲区域。在确定多个第一空闲区域中存在存储容量大于或等于待存储数据的数据量的第一空闲区域的情况下,处理器在第一空闲区域中为待存储数据分配第一子区域,并将待存储数据写入第一子区域。在确定将具有第二属性的待存储数据写入第一子区域的情况下,处理器将待存储数据的第二属性修改为第一属性。
如图6A所示,内存600a包括第一内存块610、第二内存块620、空闲内存块630、第一空闲子内存块F1_1、第二空闲子内存块F2_1、多个第一分配内存块A1_1、A1_3、A1_4和多个第二分配内存块A2_1、A2_3。
在本公开实施例中,第一内存块610、第二内存块620和空闲内存块630分别与图4A所示的第一内存块410、第二内存块420和空闲内存块430类似。为了简明,本公开在此处不再赘述。
例如,对于具有第一属性的待存储数据,处理器扫描图6A示出的第一空闲链表,得到空闲内存块630和第一空闲子内存块F1_1。根据得到空闲内存块630和第一空闲子内存块F1_1,处理器确定得到空闲内存块630和第一空闲子内存块F1_1是否可以用于存储具有第一属性的待存储数据。在确定得到空闲内存块630和第一空闲子内存块F1_1均小于待存储数据的数据量的情况下,可认为第一空闲链表中的空闲存储区域无法存储该待存储数据。此时处理器可以扫描图6A示出的第二空闲链表,得到第二空闲子内存块F2_1。
处理器可以优先确定是否可以将第一空闲子内存块F1_1和第二空闲子内存块F2_1合并,以获得更大范围的空闲子内存块。在确定第一空闲子内存块F1_1和第二空闲子内存块F2_1可以合并的情况下,可以利用合并后的空闲子内存块存储该待存储数据。存储方式可以可参考图5B所示的实施例,为了简明,本公开在此不再赘述。
在确定第一空闲子内存块F1_1和第二空闲子内存块F2_1不能合并的情况下,处理器根据第二空闲子内存块F2_1的存储容量,确定第二空闲子内存块F2_1是否可以存储具有第一属性的待存储数据。在确定第二空闲子内存块F2_1的存储容量大于或等于具有第一属性的待存储数据的数据量的情况下,处理器可以将具有第一属性的待存储数据写入第二空闲子内存块F2_1。在将具有第一属性的待存储数据写入第二空闲子内存块F2_1时,处理器还将该待存储数据的属性由第一属性修改为第二属性。此时,被写入数据的第二空闲子内存块F2_1可以被作为第二分配内存块,第二分配内存块被挂接到第二分配链表上。例如,将该待存储数据的内存标识由0修改为1,此时被写入第二空闲子内存块的数据的属性被修改为第二属性。
例如,如图6B所示,在第二分配链表中,第二分配内存块A2_2中被写入具有第一属性的待存储数据,因此图6A示出的第二空闲子内存块F2_1可以被转换为第二分配内存块A2_2,第二分配内存块A2_2被挂接到第二分配链表上。
在本公开实施例中,对于具有第二属性的待存储数据,处理器执行的内存分配操作与图6A和图6B示出的对具有第一属性的待存储数据的内存分配操作类似,为了简明,本公开在此处不再赘述。
根据本公开实施例,通过两组链表对内存进行管理,对内存的分配提供了更多灵活性和改善内存碎片化现象。通过两组链表分别表征不同属性的数据的存储区域,可以实现对同一属性的数据的集中管理,使得占有内存时长较长的数据和占用内存时长较短的数据可以被分别存储在地址相近的区域,从而使得在内存中占用内存时长较短的多个数据对应的多个存储区域被优先释放时,该多个存储区域可以被合并,从而可以提高内存中被占用时长较短的存储区域的轮转效率。这也避免被释放的存储区域位于与占用内存时长较长的两个数据对应的两个存储区域之间,从而无法被充分利用的内存碎片。
此外,两个空闲链表包括的空闲存储区域也可以供两种属性的数据共享,提高内存中存储区域的灵活转换。在对应的空闲链表无法提供存储时,可以转换数据的属性申请另一空闲链表中的存储区域,提供内存分配的成功率。在申请较大存储容量的内存块时,可以灵活合并两个空闲链表中的空闲存储区域,提高对内存碎片的使用率和提升申请较大存储容量的内存块的成功率。
在本公开实施例中,电子设备中处理器执行的操作可以由任意多个模块实现,该任意多个模块也可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,处理器中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者处理器中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图7示出了根据本公开实施例的数据处理方法的流程图。
如图7所示,该实施例的数据处理方法包括操作S610~操作S620。
在操作S710,在确定待存储数据具有第一属性的情况下,以内存的当前空闲区域中的第一边界地址为起始地址,将待存储数据依次写入当前空闲区域。
在操作S720,在确定待存储数据具有第二属性的情况下,以内存的当前空闲区域中的第二边界地址为起始地址,将待存储数据依次写入当前空闲区域。
在本公开实施例中,第一属性指示了待存储数据的内存占用时长小于预设时长,第二属性指示了待存储数据的内存占用时长大于或等于预设时长。操作S710~操作S720由处理器120执行,与上述处理器120执行的操作相对应,为了简明此处不再赘述。
图8示意性示出了根据本公开实施例的适于实现数据处理方法的电子设备的方框图。
如图8所示,根据本公开实施例的电子设备800包括处理器801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。处理器801例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器801还可以包括用于缓存用途的板载存储器。处理器801可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 803中,存储有电子设备800操作所需的各种程序和数据。处理器801、ROM802以及RAM 803通过总线804彼此相连。处理器801通过执行ROM 802和/或RAM 803中的程序来执行根据本公开实施例的方法流程的各种操作。应注意,程序也可以存储在除ROM 802和RAM 803以外的一个或多个存储器中。处理器801也可以通过执行存储在一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备800还可以包括输入/输出(I/O)接口805,输入/输出(I/O)接口805也连接至总线804。电子设备800还可以包括连接至I/O接口805的以下部件中的一项或多项:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分808经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 802和/或RAM 803和/或ROM 802和RAM 803以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的数据处理方法。
在该计算机程序被处理器801执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分809被下载和安装,和/或从可拆卸介质811被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被处理器801执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (15)

1.一种数据处理设备,包括:
内存;以及
处理器,配置为:
在确定待存储数据具有第一属性的情况下,以所述内存的当前空闲区域中的第一边界地址为起始地址,将所述待存储数据依次写入所述当前空闲区域;以及
在确定所述待存储数据具有第二属性的情况下,以所述内存的当前空闲区域中的第二边界地址为起始地址,将所述待存储数据依次写入所述当前空闲区域;
其中,所述第一属性指示了所述待存储数据的内存占用时长小于预设时长,所述第二属性指示了所述待存储数据的内存占用时间大于或等于预设时长。
2.根据权利要求1所述的数据处理设备,其中,所述处理器还配置为:在写入所述待存储数据之前,
确定所述内存的地址范围和存储容量;
以所述地址范围中的第一边界地址为起始地址构建第一链表头,以及以所述地址范围中的第二边界地址为起始地址构建第二链表头;以及
根据所述存储容量、所述第一链表头占用的内存数据量和所述第二链表头占用的内存数据量,确定所述内存的当前空闲区域;
其中,所述第一链表头与所述当前空闲区域的地址范围关联,以形成当前第一空闲链表;所述第二链表头与所述当前空闲区域的地址范围关联,以形成当前第二空闲链表。
3.根据权利要求2所述的数据处理设备,其中,所述处理器还配置为:
对于具有第一属性的待存储数据,在确定所述待存储数据的数据量小于或等于所述当前空闲区域的存储容量的情况下,以所述当前空闲区域的第一边界地址为起始地址,在所述当前空闲区域中为所述待存储数据分配第一子区域,所述第一子区域的存储容量与所述数据量一致;以及
将所述待存储数据写入所述第一子区域;
其中,所述第一子区域的地址范围与所述第一链表头相关联,以形成当前第一分配链表。
4.根据权利要求2所述的数据处理设备,其中,所述处理器还配置为:
对于具有第二属性的待存储数据,在确定所述待存储数据的数据量小于或等于所述当前空闲区域的存储容量的情况下,以所述当前空闲区域的第二边界地址为起始地址,在所述当前空闲区域中为所述待存储数据分配第二子区域,所述第二子区域的存储容量与所述数据量一致;以及
将所述待存储数据写入所述第二子区域;
其中,所述第二子区域的地址范围与所述第二链表头相关联,以形成当前第二分配链表。
5.根据权利要求3或4所述的数据处理设备,其中,所述处理器还配置为:
在确定所述待存储数据已写入所述当前空闲区域的情况下,确定所述当前空闲区域的剩余空闲区域;以及
将所述剩余空闲区域更新为当前空闲区域;
其中,所述第一链表头与更新后的当前空闲区域的地址范围相关联,以形成当前第一空闲链表;所述第二链表头与所述更新后的当前空闲区域的地址范围相关联,以形成当前第二空闲链表。
6.根据权利要求5所述的数据处理设备,其中,所述处理器还配置为:
在所述第一链表头和所述第二链表头中记录所述当前空闲区域的第一边界地址,作为所述当前空闲区域的起始地址;以及
在确定当前空闲区域已被更新的情况下,将所述更新后的当前空闲区域的起始地址写入所述当前第一空闲链表的第一链表头和所述当前第二空闲链表的第二链表头。
7.根据权利要求3所述的数据处理设备,其中,所述当前第一分配链表包括多个第一子区域;所述处理器还配置为:
响应于接收到的内存释放请求,从所述多个第一子区域中确定与所述内存释放请求对应的至少一个目标第一子区域;
将所述当前第一分配链表的第一链表头与所述至少一个目标第一子区域的地址范围解关联,并删除所述至少一个目标第一子区域内的数据,得到至少一个目标第一空闲子区域;以及
在确定所述至少一个目标第一空闲子区域和所述当前空闲区域依次紧密相邻的情况下,合并所述至少一个目标第一空闲子区域与所述当前空闲区域,得到更新后的当前空闲区域;
其中,所述第一链表头与所述更新后的当前空闲区域的地址范围相关联,形成更新后的当前第一空闲链表。
8.根据权利要求7所述的数据处理设备,其中,第一集合包括多个第一区域,所述多个第一区域包括所述至少一个目标第一空闲子区域和所述当前空闲区域;所述处理器还配置为:
从所述第一集合中确定至少一个第一区域组和至少一个第一独立区域,所述第一区域组包括紧密相邻的至少两个第一区域,所述第一独立区域与所述第一集合中的任一第一区域均不相邻;
合并所述至少一个第一区域组中的至少两个第一区域,得到至少一个第一空闲子区域,其中所述至少一个第一空闲子区域和所述至少一个第一独立区域形成多个第一空闲子区域;
将所述第一链表头与所述多个第一空闲子区域的地址范围关联,得到更新后的当前第一空闲链表,所述更新后的当前第一空闲链表指示了用于存储具有第一属性的待存储数据的不连续的多个第一空闲区域。
9.根据权利要求4所述的数据处理设备,其中,所述当前第二分配链表包括多个第二子区域,所述处理器还配置为:
响应于接收到的内存释放请求,从所述多个第二子区域中确定与所述内存释放请求对应的至少一个目标第二子区域;
将所述当前第二分配链表的第一链表头与所述至少一个目标第二子区域的地址范围解关联,并删除所述至少一个目标第二子区域内的数据,得到至少一个目标第二空闲子区域;以及
在确定所述至少一个目标第二空闲子区域和所述当前空闲区域依次紧密相邻的情况下,合并所述至少一个目标第二空闲子区域与所述当前空闲区域,得到更新后的当前空闲区域;
其中,所述第二链表头与所述更新后的当前空闲区域的地址范围相关联,形成更新后的当前第二空闲链表。
10.根据权利要求9所述的数据处理设备,其中,第二集合包括多个第二区域,所述多个第二区域包括所述至少一个目标第二空闲子区域和所述当前空闲区域;所述处理器还配置为:
从所述第二集合中确定至少一个第二区域组和至少一个第二独立区域,所述第二区域组包括紧密相邻的至少两个第二区域,所述第二独立区域与所述第二集合中的任一第二区域均不相邻;
合并所述至少一个第二区域组中的至少两个第二区域,得到至少一个第二空闲子区域,其中所述至少一个第二空闲子区域和所述至少一个第二独立区域形成多个第二空闲子区域;
将所述第二链表头与所述多个第二空闲子区域的地址范围关联,得到更新后的当前第二空闲链表,所述更新后的当前第二空闲链表指示了用于存储具有第二属性的待存储数据的不连续的多个第二空闲区域。
11.根据权利要求8或10所述的数据处理设备,其中,所述处理器还配置为:
在确定不连续的多个空闲区域的存储容量均小于所述待存储数据的数据量的情况下,获取所述当前第一空闲链表包括的多个第一空闲区域和所述当前第二空闲链表包括的多个第二空闲区域;以及
在确定所述多个第一空闲区域和所述多个第二空闲区域中存在紧密相邻的第一空闲区域和第二空闲区域的情况下,合并紧密相邻的第一空闲区域和第二空闲区域,得到第三空闲区域;
在确定所述待存储数据的数据量小于或等于所述第三空闲区域的存储容量的情况下,在所述第三空闲区域中为所述待存储数据分配第三子区域;以及
将所述待存储数据写入所述第三子区域。
12.根据权利要求11所述的数据处理设备,其中,所述处理器还配置为:
对于具有第一属性的待存储数据,在确定所述多个第一空闲区域和所述多个第二空闲区域中不存在相邻的第一空闲区域和第二空闲区域的情况下或者确定所述待存储数据的数据量大于所述第三空闲区域的存储容量的情况下,获取所述多个第二空闲区域;
在确定所述多个第二空闲区域中存在存储容量大于或等于所述待存储数据的数据量的第二空闲区域的情况下,在所述第二空闲区域中为所述待存储数据分配第二子区域;以及
将所述待存储数据写入所述第二子区域;
其中,在确定将具有第一属性的待存储数据写入第二子区域的情况下,将所述待存储数据的第一属性修改为第二属性。
13.根据权利要求11所述的数据处理设备,其中,所述处理器还配置为:
对于具有第二属性的待存储数据,在确定所述多个第一空闲区域和所述多个第二空闲区域中不存在相邻的第一空闲区域和第二空闲区域的情况下或者确定所述待存储数据的数据量大于所述第三空闲区域的存储容量的情况下,获取所述多个第一空闲区域;
在确定所述多个第一空闲区域中存在存储容量大于或等于所述待存储数据的数据量的第一空闲区域的情况下,在所述第一空闲区域中为所述待存储数据分配第一子区域;以及
将所述待存储数据写入所述第一子区域;
其中,在确定将具有第二属性的待存储数据写入第一子区域的情况下,将所述待存储数据的第二属性修改为第一属性。
14.一种数据处理方法,包括:
在确定待存储数据具有第一属性的情况下,以内存的当前空闲区域中的第一边界地址为起始地址,将所述待存储数据依次写入所述当前空闲区域;以及
在确定所述待存储数据具有第二属性的情况下,以所述内存的当前空闲区域中的第二边界地址为起始地址,将所述待存储数据依次写入所述当前空闲区域;
其中,所述第一属性指示了所述待存储数据的内存占用时长小于预设时长,所述第二属性指示了所述待存储数据的内存占用时长大于或等于预设时长。
15.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求14所述的方法。
CN202310478278.9A 2023-04-28 2023-04-28 数据处理设备、数据处理方法和计算机可读存储介质 Pending CN116719753A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310478278.9A CN116719753A (zh) 2023-04-28 2023-04-28 数据处理设备、数据处理方法和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310478278.9A CN116719753A (zh) 2023-04-28 2023-04-28 数据处理设备、数据处理方法和计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN116719753A true CN116719753A (zh) 2023-09-08

Family

ID=87870355

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310478278.9A Pending CN116719753A (zh) 2023-04-28 2023-04-28 数据处理设备、数据处理方法和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN116719753A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117453423A (zh) * 2023-12-25 2024-01-26 北京趋动智能科技有限公司 Gpu显存管理方法和系统,存储介质和电子设备
CN117806988A (zh) * 2024-02-29 2024-04-02 山东云海国创云计算装备产业创新中心有限公司 任务执行方法、任务配置方法、板卡、服务器

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117453423A (zh) * 2023-12-25 2024-01-26 北京趋动智能科技有限公司 Gpu显存管理方法和系统,存储介质和电子设备
CN117453423B (zh) * 2023-12-25 2024-04-19 北京趋动智能科技有限公司 Gpu显存管理方法和系统,存储介质和电子设备
CN117806988A (zh) * 2024-02-29 2024-04-02 山东云海国创云计算装备产业创新中心有限公司 任务执行方法、任务配置方法、板卡、服务器
CN117806988B (zh) * 2024-02-29 2024-05-24 山东云海国创云计算装备产业创新中心有限公司 任务执行方法、任务配置方法、板卡、服务器

Similar Documents

Publication Publication Date Title
CN116719753A (zh) 数据处理设备、数据处理方法和计算机可读存储介质
CN107491351B (zh) 一种基于优先级的资源分配方法、装置和设备
US8775755B2 (en) Peer-to-peer transcendent memory
US7565507B2 (en) Cooperative memory management allowing program request and release memory as needed
US9037830B2 (en) Organization of a small object area and a large object area in a Java heap
US11314689B2 (en) Method, apparatus, and computer program product for indexing a file
US20060149915A1 (en) Memory management technique
CN109308269B (zh) 一种内存管理方法及装置
CN110727517A (zh) 一种基于分区设计的内存分配方法和装置
EP1826672A2 (en) Apparatus and method for managing resources in a multiple application environment
CN111190537B (zh) 一种追加写场景下顺序存储磁盘管理的方法及系统
US10133688B2 (en) Method and apparatus for transmitting information
CN106940712B (zh) 序列生成方法与设备
CN115421924A (zh) 一种内存分配方法、装置及设备
US20060236065A1 (en) Method and system for variable dynamic memory management
WO2017113277A1 (zh) 数据处理方法、装置和系统
CN113535392B (zh) 基于cma实现支持大内存连续分配的内存管理方法及系统
CN114518962A (zh) 内存的管理方法及装置
CN116048377A (zh) 固态硬盘的数据处理方法及相关设备
CN112114962A (zh) 一种内存分配方法及装置
KR101989033B1 (ko) 플랫폼 관리 장치 및 방법
CN112559164A (zh) 一种资源共享方法及装置
US8966220B2 (en) Optimizing large page processing
JP4204405B2 (ja) メモリ管理方式
CN113282382B (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