CN112783912A - 一种数据处理方法、装置、计算机设备及存储介质 - Google Patents
一种数据处理方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN112783912A CN112783912A CN202110152393.8A CN202110152393A CN112783912A CN 112783912 A CN112783912 A CN 112783912A CN 202110152393 A CN202110152393 A CN 202110152393A CN 112783912 A CN112783912 A CN 112783912A
- Authority
- CN
- China
- Prior art keywords
- data structure
- address parameter
- allocation information
- memory allocation
- member variable
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/70—Game security or game management aspects
- A63F13/77—Game security or game management aspects involving data related to game devices or game servers, e.g. configuration data, software version or amount of memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种数据处理方法、装置、计算机设备及存储介质。本申请实施例通过当检测到数据修改操作时,基于数据修改操作对数据库中的数据进行修改;在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息;获取目标数据结构体的初始内存分配信息;当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息。该方案可以提高数据处理过程中对目标数据结构体的检测效率。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种数据处理方法、装置、计算机设备及存储介质。
背景技术
在游戏服务器中,通过数据库来储存和查询用户数据。随着游戏用户数量的增长,用户的核心数据相对较大,当多个用户同时登陆游戏时,数据库无法支撑大量用户的并发操作。为了保证游戏用户的顺畅操作,可以在游戏服务器上将用户数据在共享内存上进行缓存。
相关技术中,将用户数据在共享内存上进行缓存主要通过以下方式:缓存的数据是pod(Plain Old Data,普通旧数据)数据,也即直接对玩家数据进行修改,省去反序列化和序列化的操作。定时对用户的数据进行回写操作将数据落地到数据库。
在对相关技术的研究和实践中,本申请的发明人发现,许多游戏都会存在大量的版本发布及版本更新的需求。若游戏系统改变较小,则采用不停服更新的方案进行版本发布,不停服更新表示共享内存不能删除。而通过上述缓存方式缓存用户数据时,当用户的数据结构发生修改,则需要进行清除共享内存的操作,否则会引起因为结构变化而导致的数据错乱。但是,在不停服更新时,无法执行删除共享内存的操作,而且用于储存用户的数据结构往往十分复杂,在项目开发过程中,难免会因为开发人员的疏忽而导致用户数据结构误改,通过人工检查数据结构耗时耗力,效率较差。
发明内容
本申请实施例提供一种数据处理方法、装置、计算机设备及存储介质,可以提高数据处理过程中对目标数据结构体的检测效率。
本申请实施例提供了一种数据处理方法,包括:
当检测到数据修改操作时,基于数据修改操作对数据库中的数据进行修改;
在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息;
获取目标数据结构体的初始内存分配信息;
当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息。
相应的,本申请实施例还提供了一种数据处理装置,包括:
操作单元,用于当检测到数据修改操作时,基于数据修改操作对数据库中的数据进行修改;
第一确定单元,用于在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息;
获取单元,用于获取目标数据结构体的初始内存分配信息;
第一生成单元,用于当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息。
在一些实施例中,第一生成单元包括:
第一获取子单元,用于从当前内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第一地址参数;
第二获取子单元,用于从初始内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第二地址参数;
比较子单元,用于将第一地址参数与第二地址参数进行比较;
第一生成子单元,用于若第一地址参数与第二地址参数不同,则生成提示信息。
在一些实施例中,该数据处理装置还包括:
第二确定单元,用于基于当前内存分配信息与初始内存分配信息确定目标数据结构体中每一成员变量的地址参数变化值;
第二生成单元,用于当地址参数变化值大于预设阈值时,则生成提示信息。
在一些实施例中,第二确定子单元用于:
从当前内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第一地址参数;
从初始内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第二地址参数;
根据第一地址参数与第二地址参数计算成员变量的地址参数变化值。
在一些实施例中,第二确定子单元具体用于:
从当前内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第一地址参数;
从初始内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第二地址参数;
基于第一地址参数确定第一地址值,并基于第二地址参数确定第二地址值;计算第一地址值与第二地址值的差值,得到成员变量的地址参数变化值。
在一些实施例中,第一确定单元包括:
第三获取子单元,用于获取目标数据结构体的起始地址参数,以及目标数据结构体中每一成员变量的数据类型;
确定子单元,用于根据数据类型确定成员变量相对于起始地址参数的偏移值;
第二生成子单元,用于基于起始地址参数与偏移值生成成员变量的地址参数,得到当前内存分配信息。
相应的,本申请实施例还提供了一种计算机设备,包括存储器,处理器及存储在储存器上并可在处理器上运行的计算机程序,其中,处理器执行本申请实施例任一提供的数据处理方法。
相应的,本申请实施例还提供了一种存储介质,存储介质存储有多条指令,指令适于处理器进行加载,以执行如上的数据处理方法。
本申请实施例通过获取修改后数据库中目标数据结构体的成员变量的当前地址值,然后将成员变量的当前地址值与成员变量的初始地址值进行比较,当成员变量的当前地址值与初始地址值不相同时,则生成提示信息,以提示该目标数据结构体的内存分配信息发生改变。以此,提高数据处理过程中对目标数据结构体的检测效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的数据处理系统的场景示意图。
图2为本申请实施例提供的一种数据处理方法的流程示意图。
图3为本申请实施例提供的另一种数据处理方法的流程示意图。
图4为本申请实施例提供的另一种数据处理方法的流程示意图。
图5为本申请实施例提供的一种数据处理装置的结构框图。
图6为本申请实施例提供的另一种数据处理装置的结构框图
图7为本申请实施例提供的计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种数据处理方法、装置、存储介质及计算机设备。具体地,本申请实施例提供适用于计算机设备的数据处理装置。其中,该计算机设备可以为终端或服务器等设备,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例在此不做限制。
请参阅图1,图1为本申请实施例所提供的数据处理系统的场景示意图,包括服务器,服务器可以连接通信网络,该通信网络,可以包括无线网络以及有线网络,其中无线网络包括无线广域网、无线局域网、无线城域网、以及无线个人网中的一种或多种的组合。网络中包括路由器、网关等等网络实体。
该数据处理系统可以包括服务器等设备,如图1所示,当服务器检测到用户的数据修改操作时,基于数据修改操作对数据库中的数据进行修改;在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息;获取目标数据结构体的初始内存分配信息;当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息,从而可以提高数据处理过程中对目标数据结构体的检测效率。
需要说明的是,图1所示的数据处理系统的场景示意图仅仅是一个示例,本申请实施例描述的数据处理系统以及场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着数据处理系统的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
基于上述问题,本申请实施例提供第一种数据处理方法、装置、计算机设备及存储介质,可以提高数据处理过程中对目标数据结构体的检测效率。以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本申请实施例提供一种数据处理方法,该方法可以由终端或服务器执行,本申请实施例以数据处理方法由服务器执行为例来进行说明。
如图2所示,图2为本申请实施例提供的一种数据处理方法的流程示意图。该数据处理方法的具体流程可以如下:
101、当检测到数据修改操作时,基于数据修改操作对数据库中的数据进行修改。
在本申请实施例中,数据是指所有能输入到计算机并被计算机程序处理的符号的介质的总称,用于输入电子计算机进行处理。数据是信息的表现形式和载体。
其中,数据可以包括多种类型,比如,在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等都可以称为数据,数据经过加工后就成为信息。
具体的,多个数据可以构成一个数据库。比如,一个应用程序可以对应一个数据库,该数据库可以由多个不同类型的数据构成,以实现不同的功能。
其中,数据修改操作用于对数据库中的数据进行修改,该数据修改操作可以通过用户触发。
例如,用户可以通过终端启动用于修改数据的指定应用,将需要修改的数据加载至该指定应用。在该指定应用的数据修改界面进行操作。当检测到用户修改操作时,根据用户修改操作对数据库中的数据进行修改。
102、在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息。
其中,数据结构体指的是一种数据结构。数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,合理设计数据结构可以给数据带来更高的运行或者存储效率。
具体的,根据数据元素间关系的不同特性,通常可以划分有下列基本结构:集合结构,集合结构中数据元素间的关系是“属于同一个集合”;线性结构,线性结构中数据元素之间存在着一对一的关系;树型结构,树形结构中数据元素之间存在着一对多的关系;图形结构,图像结构的数据元素之间存在着多对多的关系,也称网状结构。
在本申请实施例中,数据结构体也即集合结构。一个数据结构体(datastructure)就是一组数据元素被集合在一起,存放在一个集合名字下面。这些数据元素,被称为成员(members)。
其中,属于同一个数据结构体的成员可以为不同的数据类型(type)和长度。数据类型指的是是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称。
其中,数据类型可以包括多种,比如,整形(int,long)、浮点型(float,double)以及字符串型(string)等。整形指的是不带小数点和指数符号的数,如:“1”;浮点型指的是带有小数部分的数,如“1.1”;字符串型指的是一个字符序列,如:“cdf437”。
具体的,定义数据结构体的语法如下:
其中,“type_name”是这个数据结构体的名字,“object_names”可以是一些对象的有效标识符,这些对象拥有上面定义的结构类型。在符号“{}”之中,有一系列的数据成员,每一个都指定有一个类型和一个效标识符作为该数据成员的名字。
例如:
这里声明了一个数据结构体“product”。并且定义了数据结构体“product”的两个成员:“weight”和“price”,其中,成员“weight”的数据类型为“int”类型,成员“price”的数据类型为“double”类型。
在本申请实施例中,目标数据结构体指的是在对数据进行修改操作之后,需要进行检测的数据结构体。比如,数据中可以包括:第一数据结构体、第二数据结构体、第三数据结构体以及第四数据结构体,目标数据结构体可以为第一数据结构体。
其中,内存分配信息指的是数据结构体中每一成员在内存中对应的存储地址。那么,本申请实施例中的当前内存分配信息则指的是对数据进行修改操作之后,目标数据结构体的内存分配信息。其中,内存是计算机中重要的部件之一,它是与CPU(CentralProcessing Unit/Processor,中央处理器)进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。
具体的,数据结构体中成员在内存里的分布规则、先后先后顺序既和软件相关又和硬件相关。所谓软件相关主要是指和具体的编程语言的编译器的特性相关,编译器为了优化CPU访问内存的效率,在生成数据结构体成员的起始地址时遵循着某种特定的规则,这就是所谓的数据结构体的成员“对齐”;所谓硬件相关主要是指CPU的“字节序”问题,也就是大于一个字节类型的数据,如int类型、short类型等,在内存中的存放顺序,即单个字节与高低地址的对应关系。
在一些实施例中,为了快速获取目标数据结构体的当前内存分配信息,步骤“确定数据库中目标数据结构体的当前内存分配信息”,可以包括以下流程:
获取目标数据结构体的起始地址参数,以及目标数据结构体中每一成员变量的数据类型;
根据数据类型确定成员变量相对于起始地址参数的偏移值;
基于起始地址参数与偏移值生成成员变量的地址参数,得到当前内存分配信息。
其中,起始地址参数为该目标数据结构体在内存中的起始地址值,该起始地址值可以用数字表示,比如,起始地址值可以为:0。
其中,成员变量指的是目标数据结构体中的数据元素,偏移值指的是成员变量对应的地址值与目标数据结构体的起始地址参数的差值。
在数据结构体中,成员变量的数据类型还可以指示该成员变量的大小,比如,int类型的数据占4个字节。字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位,也在一些计算机编程语言中表示数据类型和语言字符。在不同的操作系统或者编译器中,同一数据类型所占的字节可以不同。
例如,在32位编译器中,不同数据类型所占字节如下:char类型:1个字节,shortint类型:2个字节,int类型:4个字节,unsigned int类型:4个字节,float类型:4个字节,double类型:8个字节,long类型:4个字节,long long类型:8个字节,unsigned long类型:4个字节。
在对数据结构体进行存储时,为了提高CPU访问内存的效率,程序语言的编译器在做成员变量的存储分配时进行了优化处理,处理的原则是:对于n字节的元素,它的首地址能被n整除,这种原则称为“对齐”。其次,数据结构体的成员变量所占内存地址依次增高,第一个成员变量位于低地址处,最后一个成员变量位于高地址处,但是数据结构体成员的内存并不是连续的,编译器会对成员变量做上述“对齐”处理。
通常编译器可以设置一个对齐参数n,结构体中每个成员实际对齐参数N根据N=min(sizeof(成员变量类型),n)来得到,min()表示取最小值运算。数据结构体成员变量的内存偏移地址x,满足条件x%N=0(%为取余运算符)。结构体所有成员的对齐参数N的最大值称为结构体的对齐参数。整个结构的长度必须是结构体对齐参数的最小整数倍。
例如,目标数据结构体可以如下:
在目标数据结构体A中,包括:成员变量c,成员变量d,成员变量s以及成员变量i。其中,成员变量c的数据类型为char类型,占1个字节;成员变量d数据类型为double类型,占8个字节;成员变量s数据类型为short类型,占2个字节;成员变量i数据类型为int类型,占4个字节。
假设目标数据结构体A的初始地址参数为0,则根据上述存储分配的对齐原则,可以确定成员变量c对于初始地址参数的偏移值为0,成员变量d对于初始地址参数的偏移值为8,成员变量s对于初始地址参数的偏移值为8+8=16,成员变量i对于初始地址参数的偏移值为4+16=20。每一成员变量的地址参数为初始地址参数与该成员变量对应的偏移值的和值,那么,可以确定目标数据结构体中,各成员变量的地址参数分别为:成员变量c的地址参数为0,成员变量d的地址参数为8,成员变量s的地址参数为16以及成员变量i的地址参数为20,即可以得到该目标数据结构体A的当前内存分配信息
103、获取目标数据结构体的初始内存分配信息。
其中,初始内存分配信息指的是对数据进行修改操作之前,目标数据结构体的内存分配信息。
比如,目标数据结构体可以为目标数据结构体A,在目标数据结构体中,包括:成员变量c,成员变量d,成员变量s以及成员变量i。其中,目标数据结构体A的初始内存分配信息可以包括:成员变量c的地址参数为0,成员变量d的地址参数为4,成员变量s的地址参数为8以及成员变量i的地址参数为16。
104、当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息。
其中,提示信息指示目标数据结构体发生改变。目标数据结构体的改变指的是目标数据结构体中的成员变量的地址参数发生变化。在对数据修改操作过程中,导致成员变量的地址参数发生变化的方式可以包括多种,比如,将成员变量的数据类型修改,或者将目标数据结构体中的成员变量的位置修改等等操作都会导致成员变量的地址参数发生变化。
在对数据修改操作时,目标数据结构可以是重要数据,不能进行修改操作,若将目标数据结构体进行修改则可能导致数据错乱等问题。但是,在开发人员对数据进行修改操作过程中,由于数据量较大,难免会由于疏忽或者是缺乏经验等原因导致对目标数据结构体的误改,每次都人为的去检查目标数据结构体是否发生变化是耗时耗力的。通过本申请实施例中的方案,可以解决上述问题。
在一些实施例中,为了提高检测效率。步骤“当当前内存分配信息与初始内存分配信息不同时,生成指示所述目标数据结构体的内存分配信息发生改变的提示信息”,可以包括以下操作:
从当前内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第一地址参数;
从初始内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第二地址参数;
将第一地址参数与第二地址参数进行比较;
若第一地址参数与第二地址参数不同,则生成提示信息。
其中,第一地址参数指的是目标数据结构体中成员变量的当前地址参数。
比如,目标数据结构体A的当前内存分配信息中,各成员变量的地址参数分别为:成员变量c的第一地址参数为0,成员变量d的第一地址参数为8,成员变量s的第一地址参数为16以及成员变量i的第一地址参数为20。
其中,第二地址参数指的是目标数据结构体中成员变量的初始地址参数。
例如,目标数据结构体A的初始内存分配信息中,各成员变量的地址参数分别为:成员变量c的第二地址参数为0,成员变量d的第二地址参数为4,成员变量s的第二地址参数为8以及成员变量i的第二地址参数为16。
在确定目标数据结构体中每一成员变量的第一地址参数和第二地址参数之后,可以将第一地址参数与第二地址参数进行比较,基于比较结果,即可以确定目标数据结构体是否发生变化。
例如,根据上述举例可以得到在目标数据结构体A中,成员变量c的第一地址参数为0,第二地址参数为0;成员变量d的第一地址参数为8,第二地址参数为4;成员变量s的第一地址参数为16,第二地址参数为8;以及成员变量i的第一地址参数为20,第二地址参数为16,通过将各个成员变量的第一地址参数与第二地址参数进行比较,可以确定成员变量d、成员变量s以及成员变量i的地址参数均发生改变,则可以确定目标数据结构体的内存分配信息发生变化。
当检测到目标数据结构体的内存分配信息发生变化时,可以生成提示信息。其中,提示信息的内容可以包括地址参数发生改变的成员变量的名称以及该成员变量改变前后的地址参数等,以便以开发人员发现错误并及时更改错误,从而可以节省开发时间,提高数据处理效率。
在一些实施例中,为了提供详细的第一提示内容,步骤“生成指示目标数据结构体的内存分配信息发生改变的提示信息”,可以包括以下操作:
从目标数据结构体中,提取地址参数发生变化的成员变量,得到目标成员变量;
根据所述目标成员变量的第一地址参数与第二地址参数生成提示信息。
其中,目标成员变量指的是目标数据结构体中第一地址参数与第二地址参数不相同的成员变量。
比如,检测到目标数据结构体A中的成员变量d地址参数发生改变,则可以根据成员变量d的第一地址参数和第二地址参数生成提示信息,如下:
“structA memory change|before|offset:4|member b|curr|offset:8”
上述提示信息指示目标数据结构体A的内存发生改变,以及变化前值为:4,变化后值为:8。
在一些实施例中,为了提高对目标数据结构体检测的准确性,在步骤“生成提示信息”之前,还可以包括以下步骤:
基于当前内存分配信息与初始内存分配信息确定目标数据结构体中每一成员变量的地址参数变化值;
当地址参数变化值大于预设阈值时,则生成提示信息。
其中,地址参数变化值也即当前内存分配信息中成员变量的地址参数与初始内存分配信息中该成员变量的地址参数的差值。
在一些实施例中,为了提高检测效率。步骤“基于当前内存分配信息与初始内存分配信息确定目标数据结构体中每一成员变量的地址参数变化值”,可以包括以下操作:
从当前内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第一地址参数;
从初始内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第二地址参数;
根据第一地址参数与第二地址参数计算成员变量的地址参数变化值。
其中,第一地址参数与第二地址参数已在上述步骤中进行说明,在此不多做赘述。
其中,为了提高计算效率,步骤“根据第一地址参数与第二地址参数计算成员变量的地址参数变化值”,可以包括以下操作:
基于第一地址参数确定第一地址值,并基于第二地址参数确定第二地址值;
计算第一地址值与第二地址值的差值,得到成员变量的地址参数变化值。
其中,第一地址值指的是成员变量对应的第一地址参数的取值,第二地址值指的是成员变量对应的第二地质参数的取值。
比如,目标数据结构体A中,成员变量d的第一地址参数为8,成员变量d的第二地址参数为4。则可以确定第一地址值为:8,第二地址值为:4,然后计算第一地址值与第二地址值的差值为:4,那么,得到成员变量d的地址参数变化值为:4。
其中,预设阈值用于检测成员变量的地址参数是否发生变化,预设阈值可以设定为:0,当成员变量的地址参数变化值大于预设阈值,则可以确定该成员变量的地址参数发生变化,得到检测结果为:成员变量的地址参数发生变化,根据该检测结果,可以生成提示信息。
在一些实施例中,为了节省数据处理时间,该数据处理方法还可以包括以下步骤:
当当前内存分配信息与初始内存分配信息相同时,生成指示所述目标数据结构体的内存分配信息未发生改变第二提示信息。
其中,第二提示信息指示目标数据结构体未发生改变。第二提示信息的内容可以包括“success!”等,该第二提示信息用于告知开发人员,目标数据结构体未发生改变,以便于开发人员及时对处理后的数据执行后续操作,节省数据处理时间。
本申请实施例公开了一种数据处理方法,该方法包括:当检测到数据修改操作时,基于数据修改操作对数据库中的数据进行修改;在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息;获取目标数据结构体的初始内存分配信息;当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息。以此,通过获取修改后数据库中目标数据结构体的成员变量的当前地址值,然后将成员变量的当前地址值与成员变量的初始地址值进行比较,当成员变量的当前地址值与初始地址值不相同时,则生成提示信息,以提示该目标数据结构体的内存分配信息发生改变。可以提高数据处理过程中对目标数据结构体的检测效率。
根据上述介绍的内容,下面将举例来进一步说明本申请的数据处理方法。在本实施例中,将以该数据处理装置具体集成在服务器中为例进行说明。请参考图3,图3为本申请实施例提供的另一种数据处理方法的流程示意图。具体流程可以如下:
201、当检测到用户对指定应用的数据执行修改操作时,根据修改操作对数据进行修改,得到修改后数据。
在本申请实施例中,该数据处理方法可以应用于游戏服务器中。在游戏服务器中,通过数据库来存储和查询游戏玩家数据。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,数据管理不仅仅是存储和管理数据,还包括用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
然而随着游戏玩家数量的增多,玩家数据也越发庞大,可以将玩家数据在共享内存上进行存储。共享内存(shared memory)指在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是Unix(操作系统)下的多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。
在本申请实施例中,指定应用可以指的是游戏应用,数据则值得是该游戏应用在共享内存中存放的数据。数据可以包括游戏数据和玩家数据等,游戏数据指的是用于驱动该游戏应用的数据,玩家数据指的是游戏玩家的玩家信息等。
其中,指定应用的所有数据可以构成一个完整的计算机程序,计算机程序,也称为软件,简称程序。是指一组指示计算机或其他具有信息处理能力装置执行动作或做出判断的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。
具体的,可以将该指定应用对应的计算机程序导入计算机编译器中,对该指定应用中的数据进行修改等其他操作,通过对数据进行修改操作,可以修复指定应用运行过程中的缺陷,完善该指定应用,提高用户体验。
例如,用户(也即开发人员)可以通过计算机编译器加载指定应用的数据,然后对该指定应用进行修改操作,以得到修改后数据。
202、确定修改后数据中目标数据结构体中成员变量的第一偏移信息。
其中,目标数据结构体包括指定应用中的玩家数据。在对指定应用的数据进行修改时,为了避免玩家数据结构产生错乱,应该避免对玩家数据的修改。
其中,第一偏移信息指的是修改后数据中的目标数据结构体中的成员变量的地址相对于该目标数据结构体的起始地址的偏移值。
在本申请实施例中,可以通过clang编译器获取目标数据结构体中成员变量的第一偏移信息。其中,clang是一个C语言、C++语言、Objective-C语言的轻量级编译器。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。
例如,目标数据结构体可以如下:
上述代码中定义的目标数据结构体TestChildStruct,包括成员变量variable_int32,成员变量variable_int64,成员变量variable_uint32,成员变量variable_uint64。
进一步的,使用main函数对目标数据结构体TestChildStruct调用sizeof()函数。其中,main()称之为主函数,是所有程序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用时传递。在C语言中,sizeof()是一个判断数据类型或者表达式长度的运算符。
例如,使用main函数对目标数据结构体TestChildStruct调用sizeof()函数的代码可以如下:
然后使用如下命令在clang编译器中对上述main函数进行编译:
clang++-Xclang-fdump-record-layouts-std=c++11main.cpp
clang编译器就会自动输出这个结构的抽象语法树(ast),该抽象语法树中就包含了关于成员变量的偏移信息,如下:
***duping AST Record Layout
0|struct TestChildStruct
0|int32_t variable_int32
8|int64_t variable_int64
16|uint32_t variable_uint32
24|uint64_t variable_uint64
上述抽象语法树中,包括有目标数据结构体TestChildStruct的起始地址值:0,成员变量variable_int32相对于起始地址值的偏移值为:0,成员变量variable_int64相对于起始地址值的偏移值为:8,成员变量variable_uint32相对于起始地址值的偏移值为:16,成员变量variable_uint64相对于起始地址值的偏移值为:24。进一步的,基于每一成员变量的偏移值,得到成员变量的第一偏移信息。
其中,在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
203、获取修改后数据中目标数据结构体中成员变量的第二偏移信息。
其中,第二偏移信息指的是修改后数据在修改操作之前的初始数据中目标数据结构体的成员变量的地址相对于该目标数据结构体的起始地址的偏移值。
具体的,目标数据结构体的第二偏移信息也可以通过上一步骤中的方式进行获取,在此不做具体赘述。
例如,获取到第二偏移信息包括:目标数据结构体TestChildStruct的起始地址值:0,成员变量variable_int32相对于起始地址值的偏移值为:0,成员变量variable_int64相对于起始地址值的偏移值为:8,成员变量variable_uint32相对于起始地址值的偏移值为:16,成员变量variable_uint64相对于起始地址值的偏移值为:32。
204、将第一偏移信息与第二偏移信息进行匹配,得到匹配结果。
当确定成员变量的第一偏移信息与第二偏移信息之后,可以将第一偏移信息与第二偏移信息进行匹配。
在本申请实施例中,提供一个匹配工具,可以将第一偏移信息与第二偏移信息导入该匹配工具中进行匹配处理,该匹配工具可以为一段脚本程序。
脚本(Script)即含有bind和alias等命令的集合,可以把这个集合存为一个独立的文件。然后。在需要时执行以方便使用。脚本程序是批处理文件的延伸,是一种纯文本保存的程序,计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。脚本程序相对一般程序开发来说比较接近自然语言,可以不经编译而是解释执行,利于快速开发或一些轻量的控制。脚本程序可以存为后缀名为.cfg的文件放在cstrike文件夹下,执行时在控制台输入:exec(脚本文件名).cfg即可。比如,将一个脚本存为buys.cfg文件,则在控制台中输入:exec buys.cfg则可以实现我们所需要的功能。
其中,在该匹配工具中,还可以使用静态断言方法,通过该静态断言方法在对第一偏移信息和第二偏移信息进行匹配处理时,可以自动生成目标数据结构体中每一成员变量对应的静态断言语法。
具体的,C++0x中引入了static_assert这个关键字,用来做编译期间的断言,因此叫做静态断言。静态断言的语法如下:
static_assert(常量表达式,提示字符串)。
如果第一个参数常量表达式的值为真(true或者非零值),那么static_assert不做任何事情,就像它不存在一样,否则会产生一条编译错误,错误位置就是该static_assert语句所在行,错误提示就是第二个参数提示字符串。
使用static_assert,可以在编译期间发现更多的错误,用编译器来强制保证一些契约,并帮助我们改善编译信息的可读性,尤其是用于模板的时候。static_assert可以用在全局作用域中,命名空间中,类作用域中,函数作用域中,几乎可以不受限制的使用。在性能方面,由于是static_assert编译期间断言,不生成目标代码,因此static_assert不会造成任何运行期性能损失。
在本申请实施例中,通过引入静态断言,在数据编译期间,如果编译器发现走入了这个逻辑分支,就会直接报错的存在,大大降低了因为失误导致的预期外的共享内存中数据结构变化所带来的风险,提高数据处理效率。
例如,获取到目标数据结构体TestChildStruct中成员变量的第一偏移信息为:成员变量variable_int32偏移值为:0,成员变量variable_int64的偏移值为:8,成员变量variable_uint32的偏移值为:16,成员变量variable_uint64的偏移值为:24;获取到目标数据结构体TestChildStruct中成员变量的第二偏移信息为:成员变量variable_int32的偏移值为:0,成员变量variable_int64的偏移值为:8,成员变量variable_uint32的偏移值为:16,成员变量variable_uint64的偏移值为:32。将第一偏移信息与第二偏移信息导入匹配工具中,可以生成每一成员变量的静态断言语法,如下:
static_assert(0==0,“TestChildStruct Memory Struct Changes|Before|offect:0|type:int32_t|variable:variable_int32|Curr|offect:0|type:int32_t|variable:variable_int32”);
static_assert(8==8,“TestChildStruct Memory Struct Changes|Before|offect:8|type:int64_t|variable:variable_int64|Curr|offect:8|type:int64_t|variable:variable_int64”);
static_assert(16==16,“TestChildStruct Memory Struct Changes|Before|offect:16|type:uint32_t|variable:variable_uint32|Curr|offect:16|type:uint32_t|variable:variable_uint32”);
static_assert(24==32,“TestChildStruct Memory Struct Changes|Before|offect:24|type:int64_t|variable:variable_int64|Curr|offect:32|type:int64_t|variable:variable_int64”);
其中,每一成员变量对应的静态断言表达式中,包括有:由第一偏移值和第二偏移值构成的常量表达式,以及该成员变量的具体信息。
205、根据匹配结果生成提示信息。
其中,匹配结果也即根据目标数据结构体中每一成员变量及其第一偏移值和第二偏移值生成的静态断言语法,然后通过编译器对各个静态断言语句进行编译处理,当存在由成员变量的第一偏移值和第二偏移值构成的常量表达式值为“假”时,则可以生成提示信息。
其中,成员变量的第一偏移值和第二偏移值构成的常量表达式值为“假”,也即表示成员变量的偏移值发生改变,静态断言的常量表达式将会不满足条件从而无法通过编译,静态断言还支持自定义输出报错信息用于帮助我们快速的定位问题和修改代码。
例如,通过编译器对上一步骤中的各成员变量对应的静态断言语句进行编译,可以得到以下提示信息:
“TestChildStruct Memory Struct Changes|size of member variable countchanges,check difference are intend”
上述提示信息指示目标数据结构体成员变量的偏移值发生变化,请检查不同,以告知用户对目标数据结构体的检测结果,方便用户及时对数据进行修正处理等,提高了数据处理效率。
本申请实施例公开了一种数据处理方法,该方法包括:当检测到用户对指定应用的数据执行修改操作时,根据修改操作对数据进行修改,得到修改后数据,确定修改后数据中目标数据结构体中成员变量的第一偏移信息,获取修改后数据中目标数据结构体中成员变量的第二偏移信息,将第一偏移信息与第二偏移信息进行匹配,得到匹配结果,根据匹配结果生成提示信息。以此,可以提高数据处理过程中对目标数据结构体的检测效率。
根据上述介绍的内容,下面将举例来进一步说明本申请的数据处理方法的应用。在本实施例中,将以该数据处理方法应用于项目工程的发布为例进行说明。请参考图4,图4为本申请实施例提供的另一种数据处理方法的流程示意图。具体流程可以如下:
301、接收程序编译指令,根据程序编译指令对指定项目工程进行编译处理。
在本申请实施例中,当程序开发人员完成程序的编写操作后,可以对程序进行编译、运行等操作。具体的,可以通过第三方平台对程序进行编译、运行等操作。
其中,该第三方平台提供程序编译、运行功能等,第三方平台可以包括多种,比如,电脑。在该第三方平台上可以安装程序设计软件,开发人员可以通过第三方平台上的程序员设计软件对程序进行编译、运行操作。
其中,指定项目工程指的是开发人员编写完成应用程序,比如,软件程序包,等。
例如,开发人员将编写完成的指定项目工程导入第三方平台上安装的程序设计软件,通过对程序设计软件的操作触发程序编译指令,使得程序设计软件根据程序编译指令对指定项目工程进行编译。
302、在对指定项目工程编译处理的过程中,生成指定项目工程对应的目标数据结构信息。
其中,目标数据结构信息指的是对指定项目工程中的数据进行修改后的数据结构信息。
具体的,目标数据结构信息的生成方式在上述实施例中已做说明,可以参见上述实施例。在本申请实施例中,通过本申请的数据处理方法获取目标数据结构信息,可以提高程序编译速度,节省时间。
303、判断目标数据结构信息与预设数据结构信息是否相同。
其中,预设数据结构信息指定项目工程的初始数据结构信息,也即指定项目工程的首个版本的数据结构信息。
当获取到目标数据结构信息后,可以将目标数据结构信息与预设数据结构信息进行比较。具体的,通过本申请中的上述数据处理方法对目标数据结构信息与预设数据结构信息进行比较,对当前指定项目工程中的数据结构进行检测。通过项目编译期间对项目的数据结构信息进行检测,可以有效避免后续项目运行中的错误,降低后期损失。
304、确定指定项目工程的数据结构信息未发生变化,完成对指定程序的编译处理,并生成编译成功的提示信息。
当检测到目标数据结构信息与预设数据结构信息相同时,则可以确定指定项目工程的数据结构信息未发生变化,也即表示开发人员未将项目工程的数据进行误修改,则当前指定项目工程未存在错误,可以继续完成对该指定项目工程的编译处理,编译完成后可以生成编译成功的提示信息,可以提示开发人员当前程序未出现数据结构变化,继而可以运行该指定项目工程。
305、当接收到项目发布请求时,对编译处理后的指定项目工程进行发布。
在指定项目工程成功编译与运行后,则可以将该指定项目工程发布上线,以供用户更新或者下载应用程序。
306、确定指定项目工程的数据结构信息发生变化,中断对指定程序的编译处理,并生成编译失败的提示信息。
当检测到目标数据结构信息与预设数据结构信息不相同时,则可以确定指定项目工程的数据结构信息发生变化,也即表示项目工程中的数据被误修改,则当前指定项目工程存在错误。此时,为了降低预期外的指定项目工程的共享内存数据结构变化带来的风险,生成编译失败的提示信息,也即编译报错信息,以提示开发人员当前程序发生错误,并对错误部分进行修正,从而提高程序检测效率。
本申请实施例通过接收程序编译指令,根据程序编译指令开始对指定项目工程进行编译处理;在对指定项目工程编译处理的过程中,生成指定项目工程的目标数据结构信息;判断目标数据结构信息与预设数据结构信息是否相同;若目标数据结构信息与预设数据结构信息相同,则确定指定项目工程的数据结构信息未发生变化,完成对指定程序的编译处理,并生成编译成功的提示信息;当接收到项目发布请求时,对编译处理后的指定项目工程进行发布。若目标数据结构信息与预设数据结构信息不相同,则确定指定项目工程的数据结构信息发生变化,中断对指定程序的编译处理,并生成编译失败的提示信息。以此,可以提高程序检测效率。
为便于更好的实施本申请实施例提供的数据处理方法,本申请实施例还提供一种基于上述数据处理方法的数据处理装置。其中名词的含义与上述数据处理方法中相同,具体实现细节可以参考方法实施例中的说明。
请参阅图5,图5为本申请实施例提供的一种数据处理装置的结构框图,该装置包括:
操作单元401,用于当检测到数据修改操作时,基于数据修改操作对数据库中的数据进行修改;
第一确定单元402,用于在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息;
获取单元403,用于获取目标数据结构体的初始内存分配信息;
第一生成单元404,用于当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息。
在一些实施例中,请参阅图6,图6为本申请实施例提供的另一种数据处理装置的结构框图,第一生成单元404,可以包括:
第一获取子单元4041,用于从当前内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第一地址参数;
第二获取子单元4042,用于从初始内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第二地址参数;
比较子单元4043,用于将第一地址参数与第二地址参数进行比较;
第一生成子单元4044,用于若第一地址参数与第二地址参数不同,则生成提示信息。
在一些实施例中,该数据处理装置还可以包括:
第二确定单元,用于基于当前内存分配信息与初始内存分配信息确定目标数据结构体中每一成员变量的地址参数变化值;
第二生成单元,用于当地址参数变化值大于预设阈值时,则生成提示信息。
在一些实施例中,第二确定子单元可以用于:
从当前内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第一地址参数;
从初始内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第二地址参数;
根据第一地址参数与第二地址参数计算成员变量的地址参数变化值。
在一些实施例中,第二确定子单元具体可以用于:
从当前内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第一地址参数;
从初始内存分配信息中获取目标数据结构体中每一成员变量的地址参数,得到成员变量的第二地址参数;
基于第一地址参数确定第一地址值,并基于第二地址参数确定第二地址值;计算第一地址值与第二地址值的差值,得到成员变量的地址参数变化值。
在一些实施例中,第一确定单元302,可以包括:
第三获取子单元,用于获取目标数据结构体的起始地址参数,以及目标数据结构体中每一成员变量的数据类型;
确定子单元,用于根据数据类型确定成员变量相对于起始地址参数的偏移值;
第二生成子单元,用于基于起始地址参数与偏移值生成成员变量的地址参数,得到当前内存分配信息。
本申请实施例公开了一种数据处理装置,通过操作单元401当检测到数据修改操作时,基于数据修改操作对数据库中的数据进行修改,第一确定单元402在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息,获取单元403获取目标数据结构体的初始内存分配信息,第一生成单元404当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息。以此,提高数据处理过程中对目标数据结构体的检测效率。
本申请实施例还提供一种计算机设备,该计算机设备可以服务器,如图7所示,其示出了本申请实施例所涉及的服务器的结构示意图,具体来讲:
该服务器可以包括一个或者一个以上处理核心的处理器701、一个或一个以上计算机可读存储介质的存储器702、电源703和输入单元704等部件。本领域技术人员可以理解,图7中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器701是该服务器的控制中心,利用各种接口和线路连接整个服务器的各个部分,通过运行或执行存储在存储器702内的软件程序和/或模块,以及调用存储在存储器702内的数据,执行服务器的各种功能和处理数据,从而对服务器进行整体监控。可选的,处理器701可包括一个或多个处理核心;优选的,处理器701可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器701中。
存储器702可用于存储软件程序以及模块,处理器501通过运行存储在存储器702的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器702可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器702可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器702还可以包括存储器控制器,以提供处理器701对存储器702的访问。
服务器还包括给各个部件供电的电源703,优选的,电源703可以通过电源管理系统与处理器701逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源703还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该服务器还可包括输入单元704,该输入单元704可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,服务器还可以包括显示单元等,在此不再赘述。具体在本实施例中,服务器中的处理器701会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器702中,并由处理器701来运行存储在存储器702中的应用程序,从而实现各种功能,如下:
当检测到数据修改操作时,基于数据修改操作对数据库中的数据进行修改;
在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息;
获取目标数据结构体的初始内存分配信息;
当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
由上可知,本实施例的服务器可以实现数据处理的步骤,提高对身份信息验证的安全性。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种数据处理方法中的步骤。例如,该指令可以执行如下步骤:
当检测到数据修改操作时,基于数据修改操作对数据库中的数据进行修改;在修改操作完成之后,确定数据库中目标数据结构体的当前内存分配信息;获取目标数据结构体的初始内存分配信息;当当前内存分配信息与初始内存分配信息不同时,生成指示目标数据结构体的内存分配信息发生改变的提示信息。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本申请实施例所提供的任一种数据处理方法中的步骤,因此,可以实现本申请实施例所提供的任一种数据处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。终端的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该终端执行上述方面的各种可选实现方式中提供的数据处理方法。
以上对本申请实施例所提供的数据处理方法、装置、计算机设备及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种数据处理方法,其特征在于,所述方法包括:
当检测到数据修改操作时,基于所述数据修改操作对数据库中的数据进行修改;
在所述修改操作完成之后,确定所述数据库中目标数据结构体的当前内存分配信息;
获取所述目标数据结构体的初始内存分配信息;
当所述当前内存分配信息与所述初始内存分配信息不同时,生成指示所述目标数据结构体的内存分配信息发生改变的提示信息。
2.根据权利要求1所述的方法,其特征在于,所述当所述当前内存分配信息与所述初始内存分配信息不同时,生成指示所述目标数据结构体的内存分配信息发生改变的提示信息,包括:
从所述当前内存分配信息中获取所述目标数据结构体中每一成员变量的地址参数,得到所述成员变量的第一地址参数;
从所述初始内存分配信息中获取所述目标数据结构体中每一成员变量的地址参数,得到所述成员变量的第二地址参数;
将所述第一地址参数与所述第二地址参数进行比较;
若所述第一地址参数与所述第二地址参数不同,则生成所述提示信息。
3.根据权利要求1所述的方法,其特征在于,在所述生成指示所述目标数据结构体的内存分配信息发生改变的提示信息之前,还包括:
基于所述当前内存分配信息与所述初始内存分配信息确定所述目标数据结构体中每一成员变量的地址参数变化值;
当所述地址参数变化值大于预设阈值时,则生成所述提示信息。
4.根据权利要求3所述的方法,其特征在于,所述基于所述当前内存分配信息与所述初始内存分配信息确定所述目标数据结构体中每一成员变量的地址参数变化值,包括:
从所述当前内存分配信息中获取所述目标数据结构体中每一成员变量的地址参数,得到所述成员变量的第一地址参数;
从所述初始内存分配信息中获取所述目标数据结构体中每一成员变量的地址参数,得到所述成员变量的第二地址参数;
根据所述第一地址参数与所述第二地址参数计算所述成员变量的地址参数变化值。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第一地址参数与所述第二地址参数计算所述成员变量的地址参数变化值,包括:
基于所述第一地址参数确定第一地址值,并基于所述第二地址参数确定第二地址值;
计算所述第一地址值与所述第二地址值的差值,得到所述成员变量的地址参数变化值。
6.根据权利要求1所述的方法,其特征在于,所述确定所述数据库中目标数据结构体的当前内存分配信息,包括:
获取所述目标数据结构体的起始地址参数,以及所述目标数据结构体中每一成员变量的数据类型;
根据所述数据类型确定所述成员变量相对于所述起始地址参数的偏移值;
基于所述起始地址参数与所述偏移值生成所述成员变量的地址参数,得到所述当前内存分配信息。
7.一种数据处理装置,其特征在于,所述装置包括:
操作单元,用于当检测到数据修改操作时,基于所述数据修改操作对数据库中的数据进行修改;
第一确定单元,用于在所述修改操作完成之后,确定所述数据库中目标数据结构体的当前内存分配信息;
获取单元,用于获取所述目标数据结构体的初始内存分配信息;
第一生成单元,用于当所述当前内存分配信息与所述初始内存分配信息不同时,生成指示所述目标数据结构体的内存分配信息发生改变的提示信息。
8.根据权利要求7所述的装置,其特征在于,所述第一生成单元包括:
第一获取子单元,用于从所述当前内存分配信息中获取所述目标数据结构体中每一成员变量的地址参数,得到所述成员变量的第一地址参数;
第二获取子单元,用于从所述初始内存分配信息中获取所述目标数据结构体中每一成员变量的地址参数,得到所述成员变量的第二地址参数;
比较子单元,用于将所述第一地址参数与所述第二地址参数进行比较;
第一生成子单元,用于若所述第一地址参数与所述第二地址参数不同,则生成所述提示信息。
9.一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至6任一项所述的数据处理方法。
10.一种存储介质,其特征在于,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至6任一项所述的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110152393.8A CN112783912B (zh) | 2021-02-03 | 2021-02-03 | 一种数据处理方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110152393.8A CN112783912B (zh) | 2021-02-03 | 2021-02-03 | 一种数据处理方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112783912A true CN112783912A (zh) | 2021-05-11 |
CN112783912B CN112783912B (zh) | 2023-10-13 |
Family
ID=75760808
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110152393.8A Active CN112783912B (zh) | 2021-02-03 | 2021-02-03 | 一种数据处理方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112783912B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113239001A (zh) * | 2021-05-21 | 2021-08-10 | 珠海金山网络游戏科技有限公司 | 一种数据存储方法及装置 |
CN113449224A (zh) * | 2021-07-01 | 2021-09-28 | 北京东土科技股份有限公司 | 复杂数据类型数据映射的方法、装置、设备和存储介质 |
CN114756240A (zh) * | 2022-04-18 | 2022-07-15 | 北京字节跳动网络技术有限公司 | 一种类型转化方法、装置、设备及存储介质 |
WO2023184285A1 (zh) * | 2022-03-30 | 2023-10-05 | 华为技术有限公司 | 数据传输的方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103080925A (zh) * | 2010-07-29 | 2013-05-01 | 韩国水力原子力株式会社 | 利用制作成数据库的共享内存的工程分析程序间的同步连接方法及系统 |
CN109542636A (zh) * | 2018-10-18 | 2019-03-29 | 新浪网技术(中国)有限公司 | 一种数据更新的方法及装置 |
CN111124371A (zh) * | 2019-12-25 | 2020-05-08 | 上海米哈游天命科技有限公司 | 一种基于游戏的数据处理方法、装置、设备及存储介质 |
CN111338864A (zh) * | 2020-02-18 | 2020-06-26 | 上海闻泰电子科技有限公司 | 内存问题检测方法、装置、计算机设备及存储介质 |
-
2021
- 2021-02-03 CN CN202110152393.8A patent/CN112783912B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103080925A (zh) * | 2010-07-29 | 2013-05-01 | 韩国水力原子力株式会社 | 利用制作成数据库的共享内存的工程分析程序间的同步连接方法及系统 |
CN109542636A (zh) * | 2018-10-18 | 2019-03-29 | 新浪网技术(中国)有限公司 | 一种数据更新的方法及装置 |
CN111124371A (zh) * | 2019-12-25 | 2020-05-08 | 上海米哈游天命科技有限公司 | 一种基于游戏的数据处理方法、装置、设备及存储介质 |
CN111338864A (zh) * | 2020-02-18 | 2020-06-26 | 上海闻泰电子科技有限公司 | 内存问题检测方法、装置、计算机设备及存储介质 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113239001A (zh) * | 2021-05-21 | 2021-08-10 | 珠海金山网络游戏科技有限公司 | 一种数据存储方法及装置 |
CN113449224A (zh) * | 2021-07-01 | 2021-09-28 | 北京东土科技股份有限公司 | 复杂数据类型数据映射的方法、装置、设备和存储介质 |
CN113449224B (zh) * | 2021-07-01 | 2022-11-22 | 北京东土科技股份有限公司 | 复杂数据类型数据映射的方法、装置、设备和存储介质 |
WO2023184285A1 (zh) * | 2022-03-30 | 2023-10-05 | 华为技术有限公司 | 数据传输的方法及装置 |
CN114756240A (zh) * | 2022-04-18 | 2022-07-15 | 北京字节跳动网络技术有限公司 | 一种类型转化方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112783912B (zh) | 2023-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112783912B (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
CN107608677B (zh) | 一种编译处理方法、装置及电子设备 | |
CN106796522B (zh) | 用于更新源代码文件的系统和方法 | |
KR101687213B1 (ko) | 동적으로 로딩하는 그래프 기반 계산 | |
CN111309335B (zh) | 插件应用的编译方法、装置及计算机可读存储介质 | |
CN110990019B (zh) | 一种Java类分析方法、装置、存储介质及电子设备 | |
US20140189662A1 (en) | Extending A Development Environment | |
US8549502B2 (en) | Compiler with user-defined type inference rules | |
CN113296786B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN111290738A (zh) | 应用程序的资源处理方法、装置、设备及存储介质 | |
CN108304164B (zh) | 一种业务逻辑的开发方法及开发系统 | |
EP2100225B1 (en) | Method, system and computer program for identifying interpreted programs through class loading sequences | |
US10839124B1 (en) | Interactive compilation of software to a hardware language to satisfy formal verification constraints | |
CN112069052B (zh) | 一种异常对象检测方法、装置、设备及存储介质 | |
CN113535141A (zh) | 数据库操作代码的生成方法及装置 | |
JP5936135B2 (ja) | 情報処理装置、情報処理方法、及び、プログラム | |
WO2012024435A2 (en) | System and method for execution of high performance computing applications | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
CN111352631A (zh) | 一种接口兼容性检测方法及装置 | |
CN113791809B (zh) | 应用异常处理方法、装置以及计算机可读存储介质 | |
CN114791865B (zh) | 一种基于关系图的配置项自洽性检测方法、系统和介质 | |
CN107451050B (zh) | 函数获取方法和装置、服务器 | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
CN114706586A (zh) | 代码编译、代码运行方法、装置、计算机设备及存储介质 | |
CN113901025A (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 |