CN112015425A - 数据存储方法、读取方法、装置、电子设备及存储介质 - Google Patents
数据存储方法、读取方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112015425A CN112015425A CN202010825764.XA CN202010825764A CN112015425A CN 112015425 A CN112015425 A CN 112015425A CN 202010825764 A CN202010825764 A CN 202010825764A CN 112015425 A CN112015425 A CN 112015425A
- Authority
- CN
- China
- Prior art keywords
- data
- stored
- pointer
- memory space
- preset
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 238000013500 data storage Methods 0.000 title claims abstract description 41
- 238000006243 chemical reaction Methods 0.000 claims abstract description 56
- 238000004590 computer program Methods 0.000 claims description 4
- 229910002056 binary alloy Inorganic materials 0.000 claims description 3
- 239000002699 waste material Substances 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施方式涉及数据存储,公开了一种数据存储方法、读取方法、装置、电子设备及存储介质。本发明中,在存储数据大小小于系统指针大小的待存储数据时,通过在系统指针对应的初始地址的预设位置添加预设标识,进而标识当前指针为存储有待存储数据的指针;通过基于系统指针对应的进制,将待存储数据进行进制转换,并将转换后的待存储数据添加到系统指针对应的初始地址中除预设标识所在位置的任意位置,进而得到携带有待存储数据的待存储指针,最终只需为携带有待存储数据的待存储指针分配一个内存空间,将待存储指针存储到分配的内容空间,便可以完成指针和待存储数据的同时存储,从而大大降低了对内存空间的浪费,提高了内存空间的使用率。
Description
技术领域
本发明实施方式涉及数据存储,特别涉及一种数据存储方法、读取方法、装置、设备及存储介质。
背景技术
在现代计算机系统中,面向对象的编程语言一般都有“指针”的概念,“指针”表示数据在内存中的地址。目前,对于待存储数据的存储,通常需要申请两块内存空间,一块用于存储待存储数据,一块用于存储待存储数据所在内存空间的地址,即存储待存储数据对应的指针。
虽然目前基于指针的存储方式存在很大的优势,比如可以快速定位待存储数据,但是,在待存储数据的数据大小小于指针的大小时,指针的存在会造成内存空间的浪费。
发明内容
本发明实施方式的目的在于提供一种数据存储方法、读取方法、装置、电子设备及存储介质,旨在解决上述技术问题。
为解决上述技术问题,本发明的实施方式提供了一种数据存储方法,包括以下步骤:
获取待存储数据;
判断所述待存储数据的数据大小是否小于系统指针的大小;
若小于,则在所述系统指针对应的初始地址的预设位置添加预设标识;
基于所述系统指针对应的进制,对所述待存储数据进行进制转换,并将转换后的待存储数据添加到所述初始地址中除所述预设标识的任意位置,得到待存储指针;
为所述待存储指针分配内存空间,并将所述待存储指针存储到所述内存空间。
本发明的实施方式还提供了一种数据存储装置,包括:
数据获取模块,用于获取待存储数据;
大小判断模块,用于判断所述待存储数据的数据大小是否小于系统指针的大小;
标识添加模块,用于在所述待存储数据的大小小于所述系统指针的大小时,在所述系统指针对应的初始地址的预设位置添加预设标识;
第一进制转换模块,用于基于所述系统指针对应的进制,对所述待存储数据进行进制转换;
数据添加模块,用于将转换后的待存储数据添加到所述初始地址中除所述预设标识的任意位置,得到待存储指针;
存储模块,用于为所述待存储指针分配内存空间,并将所述待存储指针存储到所述内存空间。
本发明的实施方式还提供了一种数据读取方法,包括以下步骤:
从内存空间读取指针的值;
判断所述指针的值中是否携带有预设标识;
若有,则基于所述预设标识和预设数据类型确定规则,确定所述内存空间中存储的数据的数据类型;
基于所述数据类型,选取编码标准;
按照所述编码标准对所述指针的值进行进制转换,得到所述内存空间中存储的数据。
本发明的实施方式还提供了一种数据读取装置,包括:
指针读取模块,用于从内存空间读取指针的值;
标识判断模块,用于判断所述指针的值中是否携带有预设标识;
类型确定模块,用于在所述指针的值携带有所述预设标识时,基于所述预设标识和预设数据类型确定规则,确定所述内存空间中存储的数据的数据类型;
编码标准选取模块,用于基于所述数据类型,选取编码标准;
第二进制转换模块,用于按照所述编码标准对所述指针的值进行进制转换,得到所述内存空间中存储的数据。
本发明的实施方式还提供了一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上文所述的数据存储方法,或如上文所述的数据读取方法。
本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上文所述的数据存储方法,或如上文所述的数据读取方法。
本发明实施方式相对于现有技术而言,在存储数据大小小于系统指针大小的待存储数据时,通过在系统指针对应的初始地址的预设位置添加预设标识,进而标识当前指针为存储有待存储数据的指针;通过基于系统指针对应的进制,将待存储数据进行进制转换,并将转换后的待存储数据添加到系统指针对应的初始地址中除预设标识所在位置的任意位置,进而得到携带有待存储数据的待存储指针,最终只需为携带有待存储数据的待存储指针分配一个内存空间,将待存储指针存储到分配的内容空间,便可以完成指针和待存储数据的同时存储。基于这种数据存储方式,在不影响现有代码规则的情况下,兼顾了待存储数据大小小于系统指针的情况,从而大大降低了对内存空间的浪费,提高了内存空间的使用率。
另外,在所述基于所述系统指针对应的进制,对所述待存储数据进行进制转换之前,所述方法还包括:
确定所述待存储数据的数据类型;
其中,所述基于所述系统指针对应的进制,对所述待存储数据进行进制转换,包括:
基于所述数据类型,选取编码标准;
基于所述系统指针对应的进制,按照所述编码标准对所述待存储数据进行进制转换。
另外,所述为所述待存储指针分配内存空间,并将所述待存储指针存储到所述内存空间,包括:
对所述待存储指针进行二进制转换,将转换后的二进制数据按序存储到所述内存空间。
另外,在所述对所述待存储指针进行二进制转换,将转换后的二进制数据按序存储到所述内存空间之后,所述方法还包括:
检测所述内存空间是否还有空闲位置;
若有,则对所述空闲位置进行全0填充。
另外,在所述判断所述待存储数据的数据大小是否小于系统指针的大小之后,所述方法还包括:
若不小于,则分别为所述系统指针和所述待存储数据分配对应的内存空间;
将所述待存储数据存储到所述待存储数据对应的内存空间;
获取所述待存储数据对应的内存空间的地址,并将所述地址赋值给所述系统指针;
将赋值后的所述系统指针存储到所述系统指针对应的内存空间。
附图说明
一个或多个实施方式通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施方式的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是根据本发明第一实施方式的数据存储方法的具体流程图;
图2是根据本发明第二实施方式的数据存储方法的具体流程图;
图3是根据本发明第三实施方式的数据存储装置的结结构示意图;
图4是根据本发明第四实施方式的数据存储方法的具体流程图;
图5是根据本发明第五实施方式的数据存储装置的结结构示意图;
图6是根据本发明第六实施方式的电子设备的结构示意图。
具体实施方式
为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。
以下各个实施方式的划分是为了描述方便,不应对本发明的具体实现方式构成任何限定,各个实施方式在不矛盾的前提下可以相互结合相互引用。
本发明第一实施方式涉及一种数据存储方法,在存储数据大小小于系统指针大小的待存储数据时,通过在系统指针对应的初始地址的预设位置添加预设标识,进而标识当前指针为存储有待存储数据的指针;通过基于系统指针对应的进制,将待存储数据进行进制转换,并将转换后的待存储数据添加到系统指针对应的初始地址中除预设标识所在位置的任意位置,进而得到携带有待存储数据的待存储指针,最终只需为携带有待存储数据的待存储指针分配一个内存空间,将待存储指针存储到分配的内容空间,便可以完成指针和待存储数据的同时存储。基于这种数据存储方式,在不影响现有代码规则的情况下,兼顾了待存储数据大小小于系统指针的情况,从而大大降低了对内存空间的浪费,提高了内存空间的使用率。
下面对第一实施方式的数据存储方法的实现细节进行说明,以下内容仅为方便理解而提供的实现细节,并非实施本方案的必须。
第一实施提供的数据存储方法具体是应用于能够执行该方法的任意终端设备,比如个人计算机、平板电脑、智能手机等,此处不再一一列举,本实施方式对此也不做限制。
第一实施方式的具体流程如图1所示,具体包括以下步骤:
步骤101,获取待存储数据。
具体的说,在实际应用中,待存储数据可以是当前时刻接收到的用户输入的数据,或者从某一指定网站获取到的数据,还可以是某些应用程序生成的数据,此处不再一一列举。
步骤102,判断所述待存储数据的数据大小是否小于系统指针的大小。
具体的说,若通过判断,确定所述待存储数据的数据大小小于所述系统指定的大小,则执行步骤103;否则,执行步骤106。
此外,值得一提的是,在实际应用中,上述所说的待存储数据可以是通过接收到的数据写请求获得的,即接收到的数据写请求中携带了上述待存储数据。故而,上述用于进行判断的待存储数据的数据大小具体是应用于终端设备的数据存储系统中的调度装置对到达的IO操作进行检测,在确定该IO操作是数据写请求时,基于该请求中携带的待存储数据的属性信息来确定待存储数据的数据大小。
为了便于理解,以下举例说明:
比如说,在待存储数据的属性标识当前获取到的待存储数据为整型int时,确定数据大小为32位。
还比如说,在待存储数据的属性标识当前获取到的待存储数据为字符型char时,确定数据大小为16位。
还比如说,在待存储数据的属性标识当前获取到的待存储数据为字节型bytet时,确定数据大小为8位。
还比如说,在待存储数据的属性标识当前获取到的待存储数据为浮点型float时,确定数据大小为32位。
还比如说,在待存储数据的属性标识当前获取到的待存储数据为长整型long时,确定数据大小为64位。
通过上述举例可知,待存储数据的数据大小,具体是基于待存储数据对应的数据类型确定的。
关于上述所说的系统指针的大小通常是固定的,其具体大小由操作系统的位数决定。
比如说,对于64位操作系统的系统指针,指针大小一般为8个字节长度,即64位(一个字节=8位);对于32位操作系统的系统指针,指针大小一般为4个字节长度,即32位。
相应地,如果系统指针的大小为64位,则小于系统指针的大小的待存储数据具体为上述罗列的int、char、byte,即数据大小小于64位的;如果系统指针的大小为32位,则小于系统指针的大小的待存储数据具体为上述罗列的char和byte。
应当理解的是,以上仅为举例说明,对本实施方式的技术方案并不构成任何限定,在实际应用中,本领域技术人员可以根据操作系统来确定系统指针的大小,进而筛选出数据大小小于系统指针大小的待存储数据,本实施方式对此不做限制。
步骤103,在所述系统指针对应的初始地址的预设位置添加预设标识。
具体的说,在本实施方式中,系统指针对应的初始地址是采用全0表示的。
由于一个十六进制位数,表示4位二进制数,故而对于64位的系统指针,其对应的初始地址为16位(16*4=64),具体表示为“0x0000000000000000”。
相应地,对于32位的系统指针,其对应的初始地址为8位(8*4=32)具体表示为“0x00000000”。
此外,关于上述所说的预设标识,在本实施方式中具体为“1”,上述所说的预设位置具体为初始地址从右数起的第一位。基于这一规则,将预设标识“1”添加到64位系统指针对应的初始地址从右数起的第一位后,系统指针对应的初始地址变为“0x0000000000000001”。
应当理解的是,上述给出的预设标识,以及规定的预设位置均为一种具体的实现方式,对本实施方式的具体技术方案并不构成任何限制,在实际应用中,本领域技术人员可以根据需要选取合适的内容作为预设标识,并规定合适的位置为需要添加预设标识的预设位置。
步骤104,基于所述系统指针对应的进制,对所述待存储数据进行进制转换,并将转换后的待存储数据添加到所述初始地址中除所述预设标识的任意位置,得到待存储指针。
具体的说,由于系统指针通常为十六进制的,因而上述进行的进行转换,具体为将待存储数据进行十六进制转换,进而得到以十六进制表示的待存储数据。
应当理解的是,由于系统指针对应的初始地址中已经在预设位置添加了预设标识,因而在将十六进制表示的待存储数据添加到系统指针对应的初始地址中时,为了避免在预设位置添加数据,导致预设标识被替换,转换得到的十六进制的待存储数据需要添加在所述初始地址中除所述预设标识的任意位置。
相应地,为了便于后续进行数据读取时能够从上述携带有数据的待存储指针中读取出正确的数据,需要预先约定好转换后的待存储数据添加到所述初始地址中除所述预设标识的任意位置的规则。
为了便于后续存储和读取,本实施方式中将预设标识添加在所述初始地址从右数起的第一位,将转换得到的待存储数据按照倒序方式依次添加到所述初始地址从右数起的第二位,及第二位之后的位置。
进一步地,由于在实际应用中,不同数据类型的待存储数据在转换为十六进制的格式时,其所依据的编码标准会有所不同。故而,为了能够快速、准确的对待存储数据进行进制转换,在基于所述系统指针对应的进制,对所述待存储数据进行进制转换之前,需要先确定所述待存储数据的数据类型。
需要说明的是,此处所说的数据类型并非计算机系统中常说的八种数据类型(byte、short、int、long、float、double、boolean、char),而是表示当前待存储数据是汉字,还是英文,还是数字,还是字符等。
关于待存储数据的数据类型的确定,具体可以根据待存储数据的属性来确定,此处不再赘述。
相应地,在确定所述待存储数据的数据类型之后,上述所说的基于所述系统指针对应的进制,对所述待存储数据进行进制转换的操作,具体分为如下两步实现:
首先,基于所述数据类型,选取编码标准。
然后,基于所述系统指针对应的进制,按照所述编码标准对所述待存储数据进行进制转换。
关于上述所说的编码标准,在现有技术中,大致分为西文编码标准(如ASCII)、汉字编码标准(如GB2312、GBK、GB18030)、全球字符编码标准(如ISO/IEC 10646和Unicode)。
进一步地,为了能够根据确定的数据类型,快速、准确的选取编码标准,在实际应用中可以预先建立各种数据类型与上述编码标准之间的对应关系。
比如说,将汉字格式对应到上述给出的任意一种汉字编码标准,将数字和英文对应到西文编码标准,将字符对应到上述给出的任意一种全球字符编码标准。
为了便于理解,以下结合实例进行说明:
假设待存储数据为“啊”这个汉字,则确定其数据类型为汉字,基于预设的映射关系表,确定需要选取的编码标准为汉字编码标准。
假设选取的汉字编码标准为GB2312,则在按照GB2312对待存储数据“啊”进行十六进制转换时,通过对GB2312中各区的遍历,确定“啊”字是位于16区的01位,故而最终转换后的待存储数据具体表示为“1601”。
相应地,在将上述转换得到的内容添加到系统指针(64位)对应的初始地址时,从右数第二位开始按照倒序一次添加,最终得到的待存储指针为“0x0000000000016011”。
应当理解的是,以上仅为举例说明,对本实施方式的技术方案并不构成具体限定。
步骤105,为所述待存储指针分配内存空间,并将所述待存储指针存储到所述内存空间。
应当理解的是,由于在实际应用中,计算机中存储的数据均是以二进制格式即“0”或“1”进行存储的,因而在为待存储指针分配内存空间,并将所述待存储指针存储到分配的内存空间时,需要先对待存储指针进行二进制转换,然后将转换后的二进制数据按序存储到所述内存空间中。
此外,关于上述为待存储指针分配的内存空间,具体是基于待存储指针的位数确定的。
比如说,系统指针为64位,则得到的待存储指针依旧为64位,分配的内存空间的便是64位。
相应地,在系统指针为32位时,则得到的待存储指针为32位,分配的内存空间便是32位。
此外,值得一提的是,由于在本实施方式中为待存储指针分配的内存空间的大小具体是根据待存储指针支持的最大长度确定的,因而通常情况下在将二进制的数据存储到内存空间之后,可能还存在空闲位置。为了保证后续从该内存空间中读出的数据为当前时刻存入的数据,因而在对所述待存储指针进行二进制转换,将转换后的二进制数据按序存储到所述内存空间之后,还可以进一步检测所述内存空间是否还有空闲位置。
相应地,若所述内存空间中存在空闲位置,则对所述空闲位置进行全0填充,这样既可以沾满整个内存空间,又可以保证后续读取出的数据为存入的数据。
步骤106,分别为所述系统指针和所述待存储数据分配对应的内存空间。
步骤107,将所述待存储数据存储到所述待存储数据对应的内存空间。
步骤108,获取所述待存储数据对应的内存空间的地址,并将所述地址赋值给所述系统指针。
步骤109,将赋值后的所述系统指针存储到所述系统指针对应的内存空间。
通过上述步骤106至步骤109的描述可知,在所述待存储数据的数据大小大于所述系统指针的大小时,即一个64位或32位的系统指针无法存放下待存储数据时,需要单独为待存储数据分配一个内存空间。并且为了方便后续进行数据读取时,能够快速定位到该内存空间,进而从中读出存储的数据,需要将专门用于存储待存储数据的内存空间的地址赋值给系统指针,即将系统指针的初始地址更新为用于存储待存储数据的内存空间的地址,然后将更新后的系统指针存储到专门用于存储系统指针的存储空间。
由此,本实施方式提供的数据存储方法,在获取到待存储数据时,通过判断待存储数据的数据大小是否小于系统指针的大小,进入在确定需要存储的为数据大小小于系统指针大小的待存储数据时,通过在系统指针对应的初始地址的预设位置添加预设标识,进而标识当前指针为存储有待存储数据的指针,即并非现有单纯指示待存储数据对应的内存空间的地址的指针。接着,通过基于系统指针对应的进制,将待存储数据进行进制转换,并将转换后的待存储数据添加到系统指针对应的初始地址中除预设标识所在位置的任意位置,进而得到携带有待存储数据的待存储指针,最终只需为携带有待存储数据的待存储指针分配一个内存空间,将待存储指针存储到分配的内容空间,便可以完成指针和待存储数据的同时存储。基于这种数据存储方式,在不影响现有代码规则的情况下,兼顾了待存储数据大小小于系统指针的情况,从而大大降低了对内存空间的浪费,提高了内存空间的使用率。
本发明的第二实施方式涉及一种数据存储方法。第二实施方式以待存储数据为整型int常量为例,结合第一实施方式中给出的数据存储方法进行具体说明。
为了便于说明,本实施方式以64位计算机系统中存储一个4个字节长度的整型常量“123”为例。
首先,在64位计算机系统中,系统指针对应的初始地址为“0x0000000000000000”。
接着,由于待存储数据“123”为4个字节长度的int常量,即最大需要占用32位的空间,通过判断可知,待存储数据“123”小于系统指针的大小,因而可以将其添加到系统指针中,即只分配一个内存空间来存储指针和数据。
接着,在确定待存储数据的数据大小小于系统指针的大小时,将预设标识“1”添加到初始地址“0x0000000000000000”从右数第一位,得到“0x0000000000000001”。
接着,将“123”从十进制转换到十六进制,得到的“7b”,并将得到的“7b”以倒序方式添加到“0x0000000000000001”从右数第二位,及第二位之后的位置,得到“0x00000000000007b1”。
接着,为得到的待存储指针“0x00000000000007b1”分配一个64位的内存空间,并对待存储指针“0x”部分后的每一位数进行二进制转换。
应当理解的是,将一个十六进制的“0”进行二进制转换后仍为0,只是会由4个0表示十六进制中的一个0。故而,本实施方式主要对“7b1”部分的转换进行说明。
具体而言,对“1”进行二进制转换后,得到的数据为“0001”;对“b”进行二进制转换后,得到的数据为“1011”;对“7”进行二进制转换后,得到的数据为“0111”。
最后,按照倒序将上述得到的二进制数依次存储到图为其分配的内存空间中,即按照图2的格式进行存储,对于空闲的位置,直接进行全0填充。
由此,基于本发明提供的数据存储方法,便完成了对整型常量“123”的存储。
此外,应当理解的是,上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
本发明第三实施方式涉及一种数据存储装置,如图3所示,包括:数据获取模块301、大小判断模块302、标识添加模块303、第一进制转换模块304、数据添加模块305和存储模块306。
其中,数据获取模块301,用于获取待存储数据;大小判断模块302,用于判断所述待存储数据的数据大小是否小于系统指针的大小;标识添加模块303,用于在所述待存储数据的大小小于所述系统指针的大小时,在所述系统指针对应的初始地址的预设位置添加预设标识;第一进制转换模块304,用于基于所述系统指针对应的进制,对所述待存储数据进行进制转换;数据添加模块305,用于将转换后的待存储数据添加到所述初始地址中除所述预设标识的任意位置,得到待存储指针;存储模块306,用于为所述待存储指针分配内存空间,并将所述待存储指针存储到所述内存空间。
此外,在另一个例子中,所述数据存储装置还包括数据类型确定模块。
具体而言,所述数据类型确定模块,用于确定所述待存储数据的数据类型。
相应地,所述第一进制转换模块304具体用于基于所述数据类型,选取编码标准;基于所述系统指针对应的进制,按照所述编码标准对所述待存储数据进行进制转换。
此外,在另一个例子中,所述存储模块306具体用于对所述待存储指针进行二进制转换,将转换后的二进制数据按序存储到所述内存空间。
此外,在另一个例子中,所述存储模块306,还用于检测所述内存空间是否还有空闲位置;若有,则对所述空闲位置进行全0填充。
此外,在另一个例子中,所述存储模块306还用于分别为所述系统指针和所述待存储数据分配对应的内存空间;将所述待存储数据存储到所述待存储数据对应的内存空间;获取所述待存储数据对应的内存空间的地址,并将所述地址赋值给所述系统指针;将赋值后的所述系统指针存储到所述系统指针对应的内存空间。
不难发现,本实施方式为与第一或第二实施方式相对应的装置实施方式,本实施方式可与第一或第二实施方式互相配合实施。第一或第二实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第一或第二实施方式中。
值得一提的是,本实施方式中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本实施方式中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施方式中不存在其它的单元。
本发明第四实施方式涉及一种数据读取方法,所述数据读取方法与第一或第二实施方式中提供的数据存储方法相互配合。
下面对第四实施方式的数据存储方法的实现细节进行说明,以下内容仅为方便理解而提供的实现细节,并非实施本方案的必须。
第四实施提供的数据读取方法具体是应用于能够执行该方法的任意终端设备,比如个人计算机、平板电脑、智能手机等,此处不再一一列举,本实施方式对此也不做限制。
第四实施方式的具体流程如图4所示,具体包括以下步骤:
步骤401,从内存空间读取指针的值。
步骤402,判断所述指针的值中是否携带有预设标识。
步骤403,基于所述预设标识和预设数据类型确定规则,确定所述内存空间中存储的数据的数据类型。
步骤404,基于所述数据类型,选取编码标准。
步骤405,按照所述编码标准对所述指针的值进行进制转换,得到所述内存空间中存储的数据。
为了便于说明,本实施方式结合图2进行说明。
在从内存空间读取指针的值时,具体是计算机系统按位(共64位)自动读取当前内存空间中存储的指针的值。由于在对携带有预设标识的待存储指针进行存储时,待存储指针中的预设标识会由内存空间中的4位数表示,因而在将预设标识添加在系统指针对应的初始位置从右数第一位时,对应到内存空间的4位应该为图2中第0位至第3位。
假设,规定系统指针最右侧的一位为0,则表示系统指针是现有对应数据地址的指针;若最右侧的一位为任意预设标识,则标识系统指针是携带有待存储数据的指针。基于这一规定可知,只要图2中第0位至第3位出现1,则表示当前指针为一个携带有数据的指针,即并非现有单纯存储数据对应的内存空间的地址的指针。
接着,根据具体为图2中第1位、第2位和第3位上的数据确定待读取数据的数据类型。
假设,预设数据类型确定规则中规定,在预设标识为“1”时,规定“000”表示整型;在预设标识为“2”时,由于对2进行二进制转换后,得到的二进制数据为“0010”,规定“001”为字符型;在预设标识为“3”时,由于对3进行二进制转换后,得到的二进制数据为“0101”,规定“010”为字节型。
相应地,基于上述预设数据类型确定规则,可知“000”表示待读取的数据类型为整型,即图2给出的内存空间中存储的数据为整型常量。
接着,基于确定的数据类型,从约定的编码标准中选取合适的编码标准。由于需要读取的数据为整型常量,即数字,因而选取的编码标准可以为ASCII。
最后,按照所述编码标准对所述指针的值进行进制转换,得到所述内存空间中存储的数据。
具体为,将剩余60位的值依次读出,并将每4位转换为一个16进制数据,取出的指针的值为“0x00000000000007b”;接着,将取出的值转换为整型常量对应的十进制数,得到的数据为“123”,即最终从图2给出的内存空间中读取出的数据为整型常量“123”,这与第二实施方式中存储的数据时相同的,即本次读取操作时正确的。
步骤406,根据所述指针的值定位需要读取的数据所在的内存空间。
步骤407,从定位的内存空间中读取所述数据。
通过上述描述不难发现,本实施方式中提供的数据读取方法,在需要从内存空间中读取基于指针存储的数据时,通过从存储指针的内存空间中读取指针的值,然后通过判断读取的指针的值中是否携带有预设标识,进而确定当前指针是携带有数据的指针,还是单纯表示数据存储的内存空间地址的指针。当确定当前指针为携带有数据的指针时,通过基于预设标识和预设数据类型确定规则确定当前内存空间中存储的数据的数据类型,进而根据确定的数据类型选取合适的编码标准,并按照选取的编码标准对所述指针的值进行进制转换,进而将所述内存空间中存储的数据读取出来;当确定当前指针为单纯表示数据存储的内存空间地址的指针时,通过根据当前指针的值定位需要读取的数据所在的内存空间,进而从定位的内存空间中读取存储的数据。基于这种数据读取方式,在不影响现有代码规则的情况下,通过增加简单的判断逻辑,即可兼顾现有从单独存储数据的内存空间读取数据,又可兼顾从携带有数据的指针的内存空间读取数据,在不影响系统性能的情况下,大大提高的数据读取效率。
本发明第五实施方式涉及一种数据读取装置,如图5所示,包括:指针读取模块501、标识判断模块502、类型确定模块503、编码标准选取模块504和第二进制转换模块505。
其中,指针读取模块501,用于从内存空间读取指针的值;标识判断模块502,用于判断所述指针的值中是否携带有预设标识;类型确定模块503,用于在所述指针的值携带有所述预设标识时,基于所述预设标识和预设数据类型确定规则,确定所述内存空间中存储的数据的数据类型;编码标准选取模块504,用于基于所述数据类型,选取编码标准;第二进制转换模块505,用于按照所述编码标准对所述指针的值进行进制转换,得到所述内存空间中存储的数据。
此外,在另一个例子中,所述数据读取装置还包括定位模块和数据读取模块。
具体而言,所述定位模块,用于根据所述指针的值定位需要读取的数据所在的内存空间;所述数据读取模块,用于从定位的内存空间中读取所述数据。
不难发现,本实施方式为与第四实施方式相对应的装置实施方式,本实施方式可与第四实施方式互相配合实施。第四实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第四实施方式中。
值得一提的是,本实施方式中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本实施方式中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施方式中不存在其它的单元。
本发明第六实施方式涉及一种电子设备,如图6所示,包括至少一个处理器601;以及,与所述至少一个处理器601通信连接的存储器602;其中,所述存储器602存储有可被所述至少一个处理器601执行的指令,所述指令被所述至少一个处理器601执行,以使所述至少一个处理器601能够执行上述方法实施方式所描述的数据存储方法或数据读取方法。
其中,存储器602和处理器601采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器601和存储器602的各种电路链接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
处理器601负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器602可以被用于存储处理器601在执行操作时所使用的数据。
本申请的第七实施方式涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施方式所描述的数据存储方法或数据读取方法。
本领域技术人员可以理解实现上述实施方式方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施方式,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (10)
1.一种数据存储方法,其特征在于,包括:
获取待存储数据;
判断所述待存储数据的数据大小是否小于系统指针的大小;
若小于,则在所述系统指针对应的初始地址的预设位置添加预设标识;
基于所述系统指针对应的进制,对所述待存储数据进行进制转换,并将转换后的待存储数据添加到所述初始地址中除所述预设标识的任意位置,得到待存储指针;
为所述待存储指针分配内存空间,并将所述待存储指针存储到所述内存空间。
2.根据权利要求1所述的数据存储方法,其特征在于,在所述基于所述系统指针对应的进制,对所述待存储数据进行进制转换之前,所述方法还包括:
确定所述待存储数据的数据类型;
其中,所述基于所述系统指针对应的进制,对所述待存储数据进行进制转换,包括:
基于所述数据类型,选取编码标准;
基于所述系统指针对应的进制,按照所述编码标准对所述待存储数据进行进制转换。
3.根据权利要求1所述的数据存储方法,其特征在于,所述为所述待存储指针分配内存空间,并将所述待存储指针存储到所述内存空间,包括:
对所述待存储指针进行二进制转换,将转换后的二进制数据按序存储到所述内存空间。
4.根据权利要求3所述的数据存储方法,其特征在于,在所述对所述待存储指针进行二进制转换,将转换后的二进制数据按序存储到所述内存空间之后,所述方法还包括:
检测所述内存空间是否还有空闲位置;
若有,则对所述空闲位置进行全0填充。
5.根据权利要求1所述的数据存储方法,其特征在于,在所述判断所述待存储数据的数据大小是否小于系统指针的大小之后,所述方法还包括:
若不小于,则分别为所述系统指针和所述待存储数据分配对应的内存空间;
将所述待存储数据存储到所述待存储数据对应的内存空间;
获取所述待存储数据对应的内存空间的地址,并将所述地址赋值给所述系统指针;
将赋值后的所述系统指针存储到所述系统指针对应的内存空间。
6.一种数据存储装置,其特征在于,包括:
数据获取模块,用于获取待存储数据;
大小判断模块,用于判断所述待存储数据的数据大小是否小于系统指针的大小;
标识添加模块,用于在所述待存储数据的大小小于所述系统指针的大小时,在所述系统指针对应的初始地址的预设位置添加预设标识;
第一进制转换模块,用于基于所述系统指针对应的进制,对所述待存储数据进行进制转换;
数据添加模块,用于将转换后的待存储数据添加到所述初始地址中除所述预设标识的任意位置,得到待存储指针;
存储模块,用于为所述待存储指针分配内存空间,并将所述待存储指针存储到所述内存空间。
7.一种数据读取方法,其特征在于,包括:
从内存空间读取指针的值;
判断所述指针的值中是否携带有预设标识;
若有,则基于所述预设标识和预设数据类型确定规则,确定所述内存空间中存储的数据的数据类型;
基于所述数据类型,选取编码标准;
按照所述编码标准对所述指针的值进行进制转换,得到所述内存空间中存储的数据。
8.一种数据读取装置,其特征在于,
指针读取模块,用于从内存空间读取指针的值;
标识判断模块,用于判断所述指针的值中是否携带有预设标识;
类型确定模块,用于在所述指针的值携带有所述预设标识时,基于所述预设标识和预设数据类型确定规则,确定所述内存空间中存储的数据的数据类型;
编码标准选取模块,用于基于所述数据类型,选取编码标准;
第二进制转换模块,用于按照所述编码标准对所述指针的值进行进制转换,得到所述内存空间中存储的数据。
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至5任一所述的数据存储方法,或如权利要求7所述的数据读取方法。
10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5任一项所述的数据存储方法,或如权利要求7所述的数据读取方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010825764.XA CN112015425A (zh) | 2020-08-17 | 2020-08-17 | 数据存储方法、读取方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010825764.XA CN112015425A (zh) | 2020-08-17 | 2020-08-17 | 数据存储方法、读取方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112015425A true CN112015425A (zh) | 2020-12-01 |
Family
ID=73504817
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010825764.XA Pending CN112015425A (zh) | 2020-08-17 | 2020-08-17 | 数据存储方法、读取方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112015425A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117236236A (zh) * | 2023-11-10 | 2023-12-15 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104516823A (zh) * | 2013-09-30 | 2015-04-15 | 华为技术有限公司 | 一种数据存储方法和装置 |
CN105955727A (zh) * | 2016-04-22 | 2016-09-21 | 广东凯通软件开发有限公司 | 一种通用内存实体的创建方法和访问方法 |
CN106202548A (zh) * | 2016-07-25 | 2016-12-07 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
CN107239415A (zh) * | 2016-03-28 | 2017-10-10 | 华为技术有限公司 | 一种执行临界区操作的方法及装置 |
CN107423084A (zh) * | 2017-04-24 | 2017-12-01 | 武汉斗鱼网络科技有限公司 | 程序修改方法及装置 |
US20180024834A1 (en) * | 2016-07-22 | 2018-01-25 | International Business Machines Corporation | Executing short pointer mode applications |
CN109976751A (zh) * | 2019-03-28 | 2019-07-05 | 北京中科寒武纪科技有限公司 | 模型操作方法、相关装置及计算机可读介质 |
-
2020
- 2020-08-17 CN CN202010825764.XA patent/CN112015425A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104516823A (zh) * | 2013-09-30 | 2015-04-15 | 华为技术有限公司 | 一种数据存储方法和装置 |
CN107239415A (zh) * | 2016-03-28 | 2017-10-10 | 华为技术有限公司 | 一种执行临界区操作的方法及装置 |
CN105955727A (zh) * | 2016-04-22 | 2016-09-21 | 广东凯通软件开发有限公司 | 一种通用内存实体的创建方法和访问方法 |
US20180024834A1 (en) * | 2016-07-22 | 2018-01-25 | International Business Machines Corporation | Executing short pointer mode applications |
CN106202548A (zh) * | 2016-07-25 | 2016-12-07 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
CN107423084A (zh) * | 2017-04-24 | 2017-12-01 | 武汉斗鱼网络科技有限公司 | 程序修改方法及装置 |
CN109976751A (zh) * | 2019-03-28 | 2019-07-05 | 北京中科寒武纪科技有限公司 | 模型操作方法、相关装置及计算机可读介质 |
Non-Patent Citations (2)
Title |
---|
ABC我的博客: "32/64位平台下char、short、int、long、指针等类型分别占多少字节", Retrieved from the Internet <URL:https://blog.csdn.net/zy47675676/article/details/91474604> * |
杨源鑫,侯继红,陈锦勇,刘凯强: "嵌入式C语言技术实战开发", vol. 1, 31 May 2018, 北京航空航天大学出版社, pages: 124 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117236236A (zh) * | 2023-11-10 | 2023-12-15 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
CN117236236B (zh) * | 2023-11-10 | 2024-04-16 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110147330B (zh) | 一种字模数据的缓存方法、装置、设备和存储介质 | |
CN112445729B (zh) | 操作地址确定方法、PCIe系统、电子设备及存储介质 | |
CN111008230A (zh) | 数据存储方法、装置、计算机设备及存储介质 | |
CN115964002B (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
CN112000589A (zh) | 一种数据写入方法、数据读取方法、装置及电子设备 | |
CN115269006A (zh) | 机器码指令转换方法、装置、电子设备及可读存储介质 | |
CN113177045A (zh) | 数据提取方法、装置、可计算存储设备及数据请求设备 | |
CN112015425A (zh) | 数据存储方法、读取方法、装置、电子设备及存储介质 | |
CN113905093A (zh) | 序列化、反序列化方法、装置及电子设备 | |
CN104424163B (zh) | 文字处理方法和系统 | |
US20020052902A1 (en) | Method to convert unicode text to mixed codepages | |
CN112232025B (zh) | 一种字符串存储方法、装置及电子设备 | |
CN116996601A (zh) | 报文格式的转换方法、装置、电子设备及存储介质 | |
KR100399495B1 (ko) | 소스 스트링의 타겟 스트링으로의 변환 방법, 이의 컴퓨터시스템 및 프로그램 제품 | |
CN116467372A (zh) | 一种数据库自动转换方法、装置、电子设备及存储介质 | |
CN104021134A (zh) | 字体文件修改转换方法及其系统 | |
CN100390783C (zh) | 进行格变换的方法和系统 | |
CN111158805B (zh) | Delphi软件源语言翻译系统、方法、设备及介质 | |
CN109840080B (zh) | 字符属性比较方法、装置、存储介质及电子设备 | |
CN113590581A (zh) | 数据传输方法、装置、设备及存储介质 | |
EP1152347B1 (en) | Method to convert UNICODE text to mixed codepages | |
CN117289915B (zh) | 基于配置表的星载软件代码生成方法和装置 | |
CN116932428A (zh) | 用于内存管理单元的透传数据的方法以及内存管理单元 | |
CN109474707B (zh) | 基于串口协议的二层协议设计及数据传输方法及系统 | |
WO2023093761A1 (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 |