CN109144890A - 一种数据存储方法及装置 - Google Patents

一种数据存储方法及装置 Download PDF

Info

Publication number
CN109144890A
CN109144890A CN201810706929.4A CN201810706929A CN109144890A CN 109144890 A CN109144890 A CN 109144890A CN 201810706929 A CN201810706929 A CN 201810706929A CN 109144890 A CN109144890 A CN 109144890A
Authority
CN
China
Prior art keywords
data
stored
memory
address
last address
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.)
Granted
Application number
CN201810706929.4A
Other languages
English (en)
Other versions
CN109144890B (zh
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.)
Gree Electric Appliances Inc of Zhuhai
Original Assignee
Gree Electric Appliances Inc of Zhuhai
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 Gree Electric Appliances Inc of Zhuhai filed Critical Gree Electric Appliances Inc of Zhuhai
Priority to CN201810706929.4A priority Critical patent/CN109144890B/zh
Publication of CN109144890A publication Critical patent/CN109144890A/zh
Application granted granted Critical
Publication of CN109144890B publication Critical patent/CN109144890B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种数据存储方法及装置,其中所述方法包括:确定用于对待存储数据进行存储的预设大小的内存块,其中,所述内存块中存储有有效数据;若所述有效数据的数据大小小于所述预设大小,确定所述内存块以及所述有效数据的存储参数,其中,所述存储参数用于指示所述内存块和所述有效数据的大小;基于所述存储参数,确定所述内存块中空闲内存的位置信息;基于所述位置信息,将所述待存储数据存储在所述空闲内存中。用于解决现有内存块的存储空间利用率低,系统内存浪费严重的技术问题。

Description

一种数据存储方法及装置
技术领域
本发明涉及计算机技术领域,特别涉及一种数据存储方法及装置。
背景技术
在现有技术中,一般的软件编程,数据存储申请内存都是由系统分配,每次分配后一般不会用尽空闲内存块的全部空间,而这些剩余的空间又不适于再分配给其它数据对象,因而在程序运行一段时间之后,存储空间可能出现大量的“内存碎片”。此时,虽然系统还有很多剩余内存,用户却申请不到,造成内存浪费,甚至导致系统崩溃。
可见,现有内存块的存储空间利用率低,系统内存浪费严重。
发明内容
本发明实施例提供一种数据存储方法及装置,用于解决现有内存块的存储空间利用率低,系统内存浪费严重的技术问题。
第一方面,本发明实施例提供了一种数据存储方法,包括:
确定用于对待存储数据进行存储的预设大小的内存块,其中,所述内存块中存储有有效数据;
若所述有效数据的数据大小小于所述预设大小,确定所述内存块以及所述有效数据的存储参数,其中,所述存储参数用于指示所述内存块和所述有效数据的大小;
基于所述存储参数,确定所述内存块中空闲内存的位置信息;
基于所述位置信息,将所述待存储数据存储在所述空闲内存中。
在本发明实施例中,在内存块中存储有有效数据时,只要内存块中存在有空闲内存,在确定出指示所述有效数据以及内存块的数据大小的存储参数之后,便可以确定出所述内存块中空闲内存的位置信息,进一步地,将所述待存储数据存储在所述位置信息对应的空闲内存中。也就是说,在内存块存储有有效数据的情况下,仍能使用内存块中的空闲内存来存储数据,从而使内存块被充分使用,提高了内存块的存储空间利用率。
可选地,所述方法还包括:
确定所述内存块的第一首地址和第一末地址,所述有效数据的第二首地址和第二末地址;
判断所述空闲内存的存储大小是否大于所述待存储数据的数据大小;
若为是,判断所述第二末地址是否位于所述第二首地址之后;
若所述第二末地址位于所述第二首地址之后,确定所述空闲内存位于所述内存块的尾部,所述空闲内存具体为所述第二末地址与所述第一末地址间的尾部空闲内存。
在本发明实施例中,若内存块中存储有有效数据,当内存块的空闲内存的存储大小大于待存储数据的数据大小时,能够将待存储数据存储至该空闲内存中,也就是说,通过内存块能够循环存储数据,从而提高了内存块的利用率。
可选地,基于所述位置信息,将所述待存储数据存储在所述空闲内存中,包括:
判断所述尾部空闲内存的存储大小是否不小于所述待存储数据的数据大小;
若为是,则从所述内存块的所述第二末地址起存储所述待存储数据至所述尾部空闲内存中。
可选地,所述方法还包括:
若所述尾部空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否与所述第一末地址为同一地址;
若为是,确定所述空闲内存位于所述内存块的头部,所述空闲内存具体为所述第一首地址与所述第二首地址间的头部空闲内存;
将所述待存储数据存储至所述头部空闲内存。
可选地,所述方法还包括:
若所述第二末地址与所述第一末地址非同一地址,将所述待存储数据的部分数据存储至所述第二末地址与所述第一末地址之间的内存中,且将所述待存储数据中除所述部分数据外的其余数据存储至所述第一首地址至所述第二首地址间的内存中。
可选地,所述方法还包括:
若所述第二末地址位于所述第二首地址之前,确定所述空闲内存位于所述内存块的中间,所述空闲内存具体为所述第二末地址与所述第一末地址间的内存;
将所述待存储数据存储至所述第二末地址与所述第一末地址间的内存中。
可选地,所述方法还包括:
若所述空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否在位于所述第二首地址之后;
若所述第二末地址位于所述第二首地址之后,在所述第一末地址之后扩容第一预设长度,其中,扩容前所述第二末地址与所述第一末地址间的尾部空闲内存的存储大小与所述第一预设长度之和等于所述待存储数据的数据大小;
将所述待存储数据存储至所述第二末地址之后的内存中。
在本发明实施例中,即便是存储有有效数据的内存块中的空闲内存大小小于待存储数据的大小,可以通过对该内存块扩容,即扩充一定空间,从而对待存储数据进行存储,进一步地提高了内存块的利用率。
可选地,所述方法还包括:
若所述第二末地址位于所述第二首地址之前,在所述第一末地址之后扩容第二预设长度,将所述有效数据的前部分复制到扩容后的内存块的尾部,其中,所述第二预设长度等于所述待存储数据的数据长度;
将所述待存储数据存储至所述第二末地址之后的内存中。
第二方面,本发明实施例还提供了一种数据存储装置,包括:
第一确定单元,用于对待存储数据进行存储的预设大小的内存块,其中,所述内存块中存储有有效数据;
第二确定单元,若所述有效数据的数据大小小于所述预设大小,确定所述内存块以及所述有效数据的存储参数,其中,所述存储参数用于指示所述内存块和所述有效数据的大小;
第三确定单元,基于所述存储参数,确定所述内存块中空闲内存的位置信息;
存储单元,基于所述位置信息,将所述待存储数据存储在所述空闲内存中。
可选地,所述第三确定单元还用于:
确定所述内存块的第一首地址和第一末地址,所述有效数据的第二首地址和第二末地址;
判断所述空闲内存的存储大小是否大于所述待存储数据的数据大小;
若为是,判断所述第二末地址是否位于所述第二首地址之后;
若所述第二末地址位于所述第二首地址之后,确定所述空闲内存位于所述内存块的尾部,所述空闲内存具体为所述第二末地址与所述第一末地址间的尾部空闲内存。
可选地,所述存储单元用于:
判断所述尾部空闲内存的存储大小是否不小于所述待存储数据的数据大小;
若为是,则从所述内存块的所述第二末地址起存储所述待存储数据至所述尾部空闲内存中。
可选地,所述存储单元还用于:
若所述尾部空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否与所述第一末地址为同一地址;
若为是,确定所述空闲内存位于所述内存块的头部,所述空闲内存具体为所述第一首地址与所述第二首地址间的头部空闲内存;
将所述待存储数据存储至所述头部空闲内存。
可选地,所述存储单元还用于:
若所述第二末地址与所述第一末地址非同一地址,将所述待存储数据的部分数据存储至所述第二末地址与所述第一末地址之间的内存中,且将所述待存储数据中除所述部分数据外的其余数据存储至所述第一首地址至所述第二首地址间的内存中。
可选地,所述存储单元还用于:
若所述第二末地址位于所述第二首地址之前,确定所述空闲内存位于所述内存块的中间,所述空闲内存具体为所述第二末地址与所述第一末地址间的内存;
将所述待存储数据存储至所述第二末地址与所述第一末地址间的内存中。
可选地,所述存储单元还用于:
若所述空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否在位于所述第二首地址之后;
若所述第二末地址位于所述第二首地址之后,在所述第一末地址之后扩容第一预设长度,其中,扩容前所述第二末地址与所述第一末地址间的尾部空闲内存的存储大小与所述第一预设长度之和等于所述待存储数据的数据大小;
将所述待存储数据存储至所述第二末地址之后的内存中。
可选地,所述存储单元还用于:
若所述第二末地址位于所述第二首地址之前,在所述第一末地址之后扩容第二预设长度,将所述有效数据的前部分复制到扩容后的内存块的尾部,其中,所述第二预设长度等于所述待存储数据的数据长度;
将所述待存储数据存储至所述第二末地址之后的内存中。
第三方面,本发明实施例提供了一种用于数据存储的设备,所述设备包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如上所述的数据存储方法的步骤。
第四方面,本发明实施例提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的数据存储方法的步骤。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1为本发明实施例一中一种数据存储方法的流程图;
图2为本发明实施例一中一种数据存储方法的另外一种流程图;
图3为本发明实施例一中空闲内存位于内存块尾部区域的其中一种示意图;
图4为本发明实施例一中一种数据存储方法中步骤S104的步骤流程图;
图5为本发明实施例一中一种数据存储方法中在步骤S401之后的步骤流程图;
图6为本发明实施例一中空闲内存位于内存块头部区域的其中一种示意图;
图7为本发明实施例一中空闲内存位于内存块的其中一种示意图;
图8为本发明实施例一中一种数据存储方法中在步骤S203之后的步骤流程图;
图9为本发明实施例一中空闲内存位于内存块中间区域的其中一种示意图;
图10为本发明实施例一中一种数据存储方法中在步骤S202之后的步骤流程图;
图11为本发明实施例一中内存块扩容前后的其中一种示意图;
图12为本发明实施例一中一种数据存储方法中在步骤S1001之后的步骤流程图;
图13为本发明实施例一中内存块扩容前后的另外一种示意图;
图14为本发明实施例一中数据存储方法的流程图;
图15为本发明实施例二提供的一种数据存储装置的结构示意图;
图16为本发明实施例三提供的一种用于数据存储的设备的结构示意图。
具体实施方式
本发明的说明书和权利要求书及上述附图中的“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
为了更好的理解上述技术方案,下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
实施例一
请参考图1,本发明实施例一提供了一种数据存储方法,包括:
S101:确定用于对待存储数据进行存储的预设大小的内存块,其中,所述内存块中存储有有效数据;
S102:若所述有效数据的数据大小小于所述预设内存大小,确定所述内存块以及所述有效数据的存储参数,其中,所述存储参数用于指示所述内存块和所述有效数据的大小;
S103:基于所述存储参数,确定所述内存块中空闲内存的位置信息;
S104:基于所述位置信息,将所述待存储数据存储在所述空闲内存中。
在具体实施过程中,步骤S101至步骤S104的具体实现过程如下:
当已经存储有有效数据的内存块需要对待存储数据进行存储时,首先,确定所述内存块的预设大小,所述预设大小可以是本领域技术人员根据用户的实际使用情况,预先设置的内存大小。然后,判断所述有效数据的数据大小是否小于所述内存块的所述预设内存大小。在所述有效数据的数据大小小于所述内存块的所述预设内存大小时,进一步地,确定所述内存块以及所述有效数据的存储参数,比如,已存储的有效数据的起止点,内存块的起止点。然后,基于所述存储参数,确定所述内存块中空闲内存的位置信息,比如,所述位置信息为所述内存块的头部,或者所述内存块的尾部,等等。然后,将所述待存储数据存储在所述空闲内存中。在所述位置信息为所述内存块的头部时,将所述待存储数据存储在所述空闲内存的头部空间中。从而实现了内存块对数据的循环存储,提高了内存块的利用率。
在本发明实施例中,为了提高内存块的利用率,如图2所示,所述方法还包括:
S201:确定所述内存块的第一首地址和第一末地址,所述有效数据的第二首地址和第二末地址;
S202:判断所述空闲内存的存储大小是否大于所述待存储数据的数据大小;
S203:若为是,判断所述第二末地址是否位于所述第二首地址之后;
S204:若所述第二末地址位于所述第二首地址之后,确定所述空闲内存位于所述内存块的尾部,所述空闲内存具体为所述第二末地址与所述第一末地址间的尾部空闲内存。
在具体实施过程中,步骤S201至步骤S204的具体实现过程如下:
首先,确定所述内存块的第一首地址和第一末地址,所述有效数据的第二首地址和第二末地址。也就是说,所述存储参数可以是所述内存块的第一首地址和第一末地址,以及所述有效数据的第二首地址和第二末地址。此时,相当于分别确定出了所述内存块和所述有效数据的起止点。然后,判断所述空闲内存的存储大小是否大于所述待存储数据的数据大小。也就是说,判断所述内存块中的空闲内存是否足以存下所述待存储数据。若所述空闲内存的存储大小小于所述待存储数据的数据大小,进一步地,判断所述第二末地址是否位于所述第二首地址之后。若所述第二末地址位于所述第二首地址之后,确定所述空闲内存位于所述内存块的尾部,所述空闲内存具体为所述第二末地址与所述第一末地址间的尾部空闲内存。如图3所示的内存条,中间的黑色区域表示有效数据,则所述空闲内存为图3中右侧白色区域所对应的尾部空闲区域。
在本发明实施例中,若所述空闲内存为所述尾部空闲内存,请参考图4,S104:基于所述位置信息,将所述待存储数据存储在所述空闲内存中,包括:
S401:判断所述尾部空闲内存的存储大小是否不小于所述待存储数据的数据大小;
S402:若为是,则从所述内存块的所述第二末地址起存储所述待存储数据至所述尾部空闲内存中。
在具体实施过程中,步骤S401至步骤S402的具体实现过程如下:
首先,对所述尾部空闲内存的存储大小与所述待存储数据的数据大小进行判断,也就是说,判断所述尾部空闲内存是否能够存储所述待存储数据。若所述尾部空闲内存的存储大小大于或者等于所述待存储数据的数据大小,即所述尾部空闲内存足以存储所述待存储数据,则直接将所述待存储数据存储至所述内存块的所述第二末地址起的所述尾部空闲内存中。仍然以图3所示的所述内存块为例,则直接将所述待存储数据存储至图3的所述内存块的右侧空白区域内。
在本发明实施例中,在S401:判断所述尾部空闲内存的存储大小是否不小于所述待存储数据的数据大小之后,请参考图5,所述方法还包括:
S501:若所述尾部空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否与所述第一末地址为同一地址;
S502:若为是,确定所述空闲内存位于所述内存块的头部,所述空闲内存具体为所述第一首地址与所述第二首地址间的头部空闲内存;
S503:将所述待存储数据存储至所述头部空闲内存。
在具体实施例中,步骤S501至步骤S503的具体实现过程如下:
首先,若所述尾部空闲内存的存储大小小于所述待存储数据的数据大小,即所述尾部空闲内存不足以能够存储所述待存储数据。然后,进一步地,判断所述第二末地址是否与所述第一末地址为同一地址,即判断所述有效数据的终点是否在所述内存块的终点。若所述有效数据的终点在所述内存块的终点,则确定所述空闲内存位于所述内存块的头部,所述空闲内存具体为所述第一首地址与所述第二首地址间的头部空闲内存。然后,将所述待存储数据存储至所述头部空闲内存。如图6所示的内存块结构示意图,该图中左侧白色区域表征所述头部空闲内存。
在本发明实施例中,在步骤S501:若所述尾部空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否与所述第一末地址为同一地址之后,若所述第二末地址与所述第一末地址非同一地址,即有效数据终点不在所述内存块的终点,则先将所述待存储数据中的部分数据(比如,前部分数据)写满所述尾部空闲内存,再将所述待存储数据中剩余的数据(比如,后部分数据)写入所述第一首地址至所述第二首地址的内存中,比如,将剩余的数据写入如图7所示的内存块中左侧的空白区域。
在本发明实施例中,请参考图8,在步骤S203:若为是,判断所述第二末地址是否位于所述第二首地址之后,所述方法还包括:
S801:若所述第二末地址位于所述第二首地址之前,确定所述空闲内存位于所述内存块的中间,所述空闲内存具体为所述第二末地址与所述第一末地址间的内存;
S802:将所述待存储数据存储至所述第二末地址与所述第一末地址间的内存中。
在具体实施过程中,步骤S801至步骤S802的具体实现过程如下:
首先,若所述第二末地址位于所述第二首地址之前,确定所述空闲内存位于所述内存块的中间,如图9所示的所述内存块,有效数据终点在起点之前,则图中的白色区域为所述第二末地址与所述第一末地址间的内存。然后,将所述待存储数据存储至所述第二末地址与所述第一末地址间的内存中。也就是说,若所述有效数据的终点在起点之前,将所述待存储数据写入所述内存块的中间的空闲内存中。
在本发明实施例中,请参考图10,在步骤S202:判断所述空闲内存的存储大小是否大于所述待存储数据的数据大小之后,所述方法还包括:
S1001:若所述空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否在位于所述第二首地址之后;
S1002:若所述第二末地址位于所述第二首地址之后,在所述第一末地址之后扩容第一预设长度,其中,扩容前所述第二末地址与所述第一末地址间的尾部空闲内存的存储大小与所述第一预设长度之和等于所述待存储数据的数据大小;
S1003:将所述待存储数据存储至所述第二末地址之后的内存中。
在具体实施过程中,步骤S1001至步骤S1003的具体实现过程如下:
首先,若所述空闲内存的存储大小小于所述待存储数据的数据大小,即空闲内存不足以存储所述待存储数据,则进一步地判断所述第二末地址是否在位于所述第二首地址之后;即判断所述有效数据的终点是否在其起点之后,若是,则,在所述第一末地址之后扩容第一预设长度,其中,扩容前所述第二末地址与所述第一末地址间的尾部空闲内存的存储大小与所述第一预设长度之和等于所述待存储数据的数据大小;也就是说,直接将现有内存块扩容一定长度。然后,将所述待存储数据存储至所述第二末地址之后的内存中。扩容前后的所述内存块如图11所示的内存块中。
在本发明实施中,请参考图12,在步骤S1001:若所述空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否在位于所述第二首地址之后,所述方法还包括:
S1201:若所述第二末地址位于所述第二首地址之前,在所述第一末地址之后扩容第二预设长度,将所述有效数据的前部分复制到扩容后的内存块的尾部,其中,所述第二预设长度等于所述待存储数据的数据长度;
S1202:将所述待存储数据存储至所述第二末地址之后的内存中。
在具体实施过程中,步骤S1201至步骤S1202的具体实现过程如下:
首先,若所述有效数据终点位于起点之前,对现有内存块进行扩容一定长度,该长度为所述待存储数据的长度,将所述有效数据的前部分数据复制到扩容后的内存块尾部(保证了所述有效数据的连续性),然后,在所述有效数据终点之后存储所述待存储数据。扩容前后,所述内存块的示意图如图13所示。
在本发明实施例中,每次将待存储数据存储至所述内存块之后,便更新所述内存块,以及其已存储的数据的相关参数,比如,相应的首末地址。一旦有新的待存储数据要存储至所述内存块时,便可以基于上述所提供的数据存储方法来实现对待存储数据的存储,从而实现了内存块对待存储数据的循环存储,从而使内存块被充分利用,提高了内存块的存储空间利用率。
本发明实施例所提供的数据存储方法的整个流程图如图14所示,其中图中的“end”表示第二末地址,“start”表示第一首地址。由于具体的步骤流程在前述部分已经祥述,在此就不再赘述了。
实施例二
基于与本发明实施例一同样的发明构思,请参考图15,本发明实施例二还提供了一种数据存储装置,包括:
第一确定单元10,用于对待存储数据进行存储的预设大小的内存块,其中,所述内存块中存储有有效数据;
第二确定单元20,若所述有效数据的数据大小小于所述预设大小,确定所述内存块以及所述有效数据的存储参数,其中,所述存储参数用于指示所述内存块和所述有效数据的大小;
第三确定单元30,基于所述存储参数,确定所述内存块中空闲内存的位置信息;
存储单元40,基于所述位置信息,将所述待存储数据存储在所述空闲内存中。
在本发明实施例中,第三确定单元30还用于:
确定所述内存块的第一首地址和第一末地址,所述有效数据的第二首地址和第二末地址;
判断所述空闲内存的存储大小是否大于所述待存储数据的数据大小;
若为是,判断所述第二末地址是否位于所述第二首地址之后;
若所述第二末地址位于所述第二首地址之后,确定所述空闲内存位于所述内存块的尾部,所述空闲内存具体为所述第二末地址与所述第一末地址间的尾部空闲内存。
在本发明实施例中,存储单元40用于:
判断所述尾部空闲内存的存储大小是否不小于所述待存储数据的数据大小;
若为是,则从所述内存块的所述第二末地址起存储所述待存储数据至所述尾部空闲内存中。
在本发明实施例中,存储单元40还用于:
若所述尾部空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否与所述第一末地址为同一地址;
若为是,确定所述空闲内存位于所述内存块的头部,所述空闲内存具体为所述第一首地址与所述第二首地址间的头部空闲内存;
将所述待存储数据存储至所述头部空闲内存。
在本发明实施例中,存储单元40还用于:
若所述第二末地址与所述第一末地址非同一地址,将所述待存储数据的部分数据存储至所述第二末地址与所述第一末地址之间的内存中,且将所述待存储数据中除所述部分数据外的其余数据存储至所述第一首地址至所述第二首地址间的内存中。
在本发明实施例中,存储单元40还用于:
若所述第二末地址位于所述第二首地址之前,确定所述空闲内存位于所述内存块的中间,所述空闲内存具体为所述第二末地址与所述第一末地址间的内存;
将所述待存储数据存储至所述第二末地址与所述第一末地址间的内存中。
在本发明实施例中,存储单元40还用于:
若所述空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否在位于所述第二首地址之后;
若所述第二末地址位于所述第二首地址之后,在所述第一末地址之后扩容第一预设长度,其中,扩容前所述第二末地址与所述第一末地址间的尾部空闲内存的存储大小与所述第一预设长度之和等于所述待存储数据的数据大小;
将所述待存储数据存储至所述第二末地址之后的内存中。
在本发明实施例中,存储单元40还用于:
若所述第二末地址位于所述第二首地址之前,在所述第一末地址之后扩容第二预设长度,将所述有效数据的前部分复制到扩容后的内存块的尾部,其中,所述第二预设长度等于所述待存储数据的数据长度;
将所述待存储数据存储至所述第二末地址之后的内存中。
实施例三
图16为本发明实施例三提供的一种用于数据存储的设备。该设备包括处理器50和存储器60,其中,处理器50用于执行存储器60中存储的计算机程序时实现图1所示的数据存储方法的步骤。
可选的,处理器50具体可以是中央处理器、特定应用集成电路(ApplicationSpecific Integrated Circuit,ASIC),可以是一个或多个用于控制程序执行的集成电路,可以是使用现场可编程门阵列(Field Programmable Gate Array,FPGA)开发的硬件电路,可以是基带处理器。
可选的,处理器50可以包括至少一个处理核。
可选的,所述设备还包括存储器60,存储器60可以包括只读存储器(Read OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)和磁盘存储器。存储器60用于存储处理器50运行时所需的数据。存储器60的数量为一个或多个。
实施例四
本发明实施例四中还提供一种可读存储介质,该计算机可读存储介质存储有计算机指令,当计算机指令在计算机上运行时可以实现如图1所示的数据存储方法的步骤。
在本发明实施例中,应该理解到,所揭露方法及装置,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性或其它的形式。
在本发明实施例中的各功能单元可以集成在一个处理单元中,或者各个单元也可以均是独立的物理模块。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备,例如可以是个人计算机,服务器,或者网络设备等,或处理器(Processor)执行本发明各个实施例的方法的全部或部分步骤。而前述的存储介质包括:通用串行总线闪存盘(Universal Serial Bus flash drive,USB)、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种数据存储方法,其特征在于,包括:
确定用于对待存储数据进行存储的预设大小的内存块,其中,所述内存块中存储有有效数据;
若所述有效数据的数据大小小于所述预设大小,确定所述内存块以及所述有效数据的存储参数,其中,所述存储参数用于指示所述内存块和所述有效数据的大小;
基于所述存储参数,确定所述内存块中空闲内存的位置信息;
基于所述位置信息,将所述待存储数据存储在所述空闲内存中。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
确定所述内存块的第一首地址和第一末地址,所述有效数据的第二首地址和第二末地址;
判断所述空闲内存的存储大小是否大于所述待存储数据的数据大小;
若为是,判断所述第二末地址是否位于所述第二首地址之后;
若所述第二末地址位于所述第二首地址之后,确定所述空闲内存位于所述内存块的尾部,所述空闲内存具体为所述第二末地址与所述第一末地址间的尾部空闲内存。
3.如权利要求2所述的方法,其特征在于,基于所述位置信息,将所述待存储数据存储在所述空闲内存中,包括:
判断所述尾部空闲内存的存储大小是否不小于所述待存储数据的数据大小;
若为是,则从所述内存块的所述第二末地址起存储所述待存储数据至所述尾部空闲内存中。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
若所述尾部空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否与所述第一末地址为同一地址;
若为是,确定所述空闲内存位于所述内存块的头部,所述空闲内存具体为所述第一首地址与所述第二首地址间的头部空闲内存;
将所述待存储数据存储至所述头部空闲内存。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:
若所述第二末地址与所述第一末地址非同一地址,将所述待存储数据的部分数据存储至所述第二末地址与所述第一末地址之间的内存中,且将所述待存储数据中除所述部分数据外的其余数据存储至所述第一首地址至所述第二首地址间的内存中。
6.如权利要求2所述的方法,其特征在于,所述方法还包括:
若所述第二末地址位于所述第二首地址之前,确定所述空闲内存位于所述内存块的中间,所述空闲内存具体为所述第二末地址与所述第一末地址间的内存;
将所述待存储数据存储至所述第二末地址与所述第一末地址间的内存中。
7.如权利要求2所述的方法,其特征在于,所述方法还包括:
若所述空闲内存的存储大小小于所述待存储数据的数据大小,判断所述第二末地址是否在位于所述第二首地址之后;
若所述第二末地址位于所述第二首地址之后,在所述第一末地址之后扩容第一预设长度,其中,扩容前所述第二末地址与所述第一末地址间的尾部空闲内存的存储大小与所述第一预设长度之和等于所述待存储数据的数据大小;
将所述待存储数据存储至所述第二末地址之后的内存中。
8.如权利要求7所述的方法,其特征在于,所述方法还包括:
若所述第二末地址位于所述第二首地址之前,在所述第一末地址之后扩容第二预设长度,将所述有效数据的前部分复制到扩容后的内存块的尾部,其中,所述第二预设长度等于所述待存储数据的数据长度;
将所述待存储数据存储至所述第二末地址之后的内存中。
9.一种数据存储装置,其特征在于,包括:
第一确定单元,用于对待存储数据进行存储的预设大小的内存块,其中,所述内存块中存储有有效数据;
第二确定单元,若所述有效数据的数据大小小于所述预设大小,确定所述内存块以及所述有效数据的存储参数,其中,所述存储参数用于指示所述内存块和所述有效数据的大小;
第三确定单元,基于所述存储参数,确定所述内存块中空闲内存的位置信息;
存储单元,基于所述位置信息,将所述待存储数据存储在所述空闲内存中。
10.如权利要求9所述的装置,其特征在于,所述第三确定单元还用于:
确定所述内存块的第一首地址和第一末地址,所述有效数据的第二首地址和第二末地址;
判断所述空闲内存的存储大小是否大于所述待存储数据的数据大小;
若为是,判断所述第二末地址是否位于所述第二首地址之后;
若所述第二末地址位于所述第二首地址之后,确定所述空闲内存位于所述内存块的尾部,所述空闲内存具体为所述第二末地址与所述第一末地址间的尾部空闲内存。
CN201810706929.4A 2018-07-02 2018-07-02 一种数据存储方法及装置 Active CN109144890B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810706929.4A CN109144890B (zh) 2018-07-02 2018-07-02 一种数据存储方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810706929.4A CN109144890B (zh) 2018-07-02 2018-07-02 一种数据存储方法及装置

Publications (2)

Publication Number Publication Date
CN109144890A true CN109144890A (zh) 2019-01-04
CN109144890B CN109144890B (zh) 2021-02-05

Family

ID=64802657

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810706929.4A Active CN109144890B (zh) 2018-07-02 2018-07-02 一种数据存储方法及装置

Country Status (1)

Country Link
CN (1) CN109144890B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205289A1 (en) * 2003-04-11 2004-10-14 Sujaya Srinivasan Reclaiming blocks in a block-alterable memory
CN104598390A (zh) * 2011-11-14 2015-05-06 北京奇虎科技有限公司 一种数据存储方法及装置
CN105302737A (zh) * 2015-11-24 2016-02-03 浪潮(北京)电子信息产业有限公司 一种内存分配管理方法及系统
US20160154586A1 (en) * 2014-12-02 2016-06-02 Arm Limited Memory management
CN107153618A (zh) * 2016-03-02 2017-09-12 阿里巴巴集团控股有限公司 一种内存分配的处理方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205289A1 (en) * 2003-04-11 2004-10-14 Sujaya Srinivasan Reclaiming blocks in a block-alterable memory
CN104598390A (zh) * 2011-11-14 2015-05-06 北京奇虎科技有限公司 一种数据存储方法及装置
US20160154586A1 (en) * 2014-12-02 2016-06-02 Arm Limited Memory management
CN105302737A (zh) * 2015-11-24 2016-02-03 浪潮(北京)电子信息产业有限公司 一种内存分配管理方法及系统
CN107153618A (zh) * 2016-03-02 2017-09-12 阿里巴巴集团控股有限公司 一种内存分配的处理方法及装置

Also Published As

Publication number Publication date
CN109144890B (zh) 2021-02-05

Similar Documents

Publication Publication Date Title
CN107168647B (zh) Flash数据读写方法及系统
KR100939145B1 (ko) 메모리 디바이스
US10459837B2 (en) Data storage device with production state awareness and non-volatile memory operating method with production state awareness
CN104008061A (zh) 内存回收方法及装置
EP1576593B1 (en) Dual journaling store method and storage medium thereof
CN103984565B (zh) 文件系统预提取的方法与电子装置以及启动方法
CN110673789B (zh) 固态硬盘的元数据存储管理方法、装置、设备及存储介质
CN104423894A (zh) 数据储存装置以及快闪存储器控制方法
CN109697027A (zh) 包括共享存储器区域和专用存储器区域的数据存储设备
CN111240601B (zh) 一种分区空间的超级块确定方法、装置、设备及存储介质
CN103412822A (zh) 操作非易失性内存和数据操作的方法和相关装置
CN111324303A (zh) Ssd垃圾回收方法、装置、计算机设备及存储介质
CN109753361A (zh) 一种内存管理方法、电子设备及存储装置
CN105988875B (zh) 一种运行进程的方法及装置
US20060095707A1 (en) Bidirectional data storing method
US20100241786A1 (en) Apparatus and method for optimized NAND flash memory management for devices with limited resources
CN110399101A (zh) 一种磁盘的写操作处理方法、装置、系统及存储介质
CN103377135A (zh) 寻址方法、装置及系统
CN109144890A (zh) 一种数据存储方法及装置
CN105653466A (zh) 数据储存装置以及快闪存储器控制方法
US8209475B2 (en) Write timeout control methods for flash memory and memory devices using the same
CN113253939B (zh) 数据处理方法、装置、电子设备及存储介质
CN113849311B (zh) 内存空间管理方法、装置、计算机设备和存储介质
CN101727404A (zh) 闪存装置以及资料更新方法
CN109634514B (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
GR01 Patent grant
GR01 Patent grant