一种优化wasm字节码的方法,包括:读取wasm字节码并解析,得到wasm模块对象;根据解析得到的wasm模块对象创建线性内存并填充线性内存;执行所述wasm模块对象中的start函数,并根据start函数的执行结果修改线性内存;采用修改后的线性内存中的数据替换wasm模块对象中的对应数据段;编码替换数据段后的wasm模块并保存为wasm字节码。所述方法可以应用于区块链中wasm合约的部署和调用。块链中wasm合约的部署和调用。块链中wasm合约的部署和调用。
【技术实现步骤摘要】
一种优化wasm字节码的方法及执行方法、计算机设备及存储介质
[0001]本说明书实施例属于编译
,尤其涉及一种优化wasm字节码的方法及执行方法、计算机设备及存储介质。
技术介绍
[0002]WebAssembly是由W3C社区组开发的开放标准,是一种安全,可移植的低级代码格式,专为高效执行和紧凑表示而设计,可以接近原生的性能运行,并为诸如C、C++、Java、Go等语言提供一个编译目标。WASM虚拟机起初设计的目的是用于解决Web程序日益严峻的性能问题,由于其具有的优越特性,被越来越多的非Web项目所采用,例如替代区块链智能合约执行引擎EVM。
技术实现思路
[0003]本专利技术的目的在于提供一种优化wasm字节码的方法,一种执行所述优化后的wasm字节码的方法,计算机设备及存储介质,包括:
[0004]一种优化wasm字节码的方法,包括:
[0005]读取wasm字节码并解析,得到wasm模块对象;
[0006]根据解析得到的wasm模块对象创建线性内存并填充线性内存;
[0007]执行所述wasm模块对象中的start函数,并根据start函数的执行结果修改线性内存;
[0008]采用修改后的线性内存中的数据替换wasm模块对象中的对应数据段;
[0009]编码替换数据段后的wasm模块并保存为wasm字节码。
[0010]一种执行所述优化后的wasm字节码的方法,包括:
[0011]读取所述优化后的wasm字节码并解析,得到wasm模块对象;
[0012]根据解析得到的wasm模块对象创建线性内存并填充线性内存;
[0013]执行所述wasm模块对象中的代码段的代码。
[0014]一种计算机设备,包括:
[0015]处理器;
[0016]以及存储器,其中存储有程序,其中在所述处理器执行所述程序时,进行以下操作:
[0017]读取所述优化后的wasm字节码并解析,得到wasm模块对象;
[0018]根据解析得到的wasm模块对象创建线性内存并填充线性内存;
[0019]执行所述wasm模块对象中的代码段的代码。
[0020]一种存储介质,用于存储程序,其中所述程序在被执行时进行以下操作:
[0021]读取wasm字节码并解析,得到wasm模块对象;
[0022]根据解析得到的wasm模块对象创建线性内存并填充线性内存;
[0023]执行所述wasm模块对象中的start函数,并根据start函数的执行结果修改线性内存;
[0024]采用修改后的线性内存中的数据替换wasm模块对象中的对应数据段;
[0025]编码替换数据段后的wasm模块并保存为wasm字节码。
[0026]通过上述实施例,这样,在后续加载和执行优化后的wasm字节码的过程中,免去了重复执行start函数带来的开销,从而提升程序的运行性能。
附图说明
[0027]为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0028]图1是一实施例中Java程序的编译、执行过程的示意图;
[0029]图2是一编译器可以在将Java源代码编译成wasm文件的过程的流程图;
[0030]图3是一实施例中字节码结构和虚拟机模块示意图;
[0031]图4是一实施例中的方法流程图;
[0032]图5是一实施例中wasm文件与线性内存、受管内存中的示意图;
[0033]图6是一实施例中wasm文件与线性内存、受管内存中的示意图;
[0034]图7是一实施例中wasm文件与线性内存、受管内存中的示意图;
[0035]图8是一实施例中wasm文件与线性内存、受管内存中的示意图;
[0036]图9是一实施例中的方法流程图;
[0037]图10是一实施例中在区块链网络中创建并部署智能合约的示意图;
[0038]图11是一实施例中在区块链网络中创建、部署并调用智能合约的示意图;
[0039]图12是一实施例中在区块链网络中创建、部署并调用智能合约的示意图;
[0040]图13是一实施例中字节码结构和虚拟机模块示意图。
具体实施方式
[0041]为了使本
的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
[0042]高级计算机语言便于人们编写,阅读交流,维护,机器语言则是计算机能直接解读、运行的。编译器可以将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言(High
‑
level language),如C、C++等,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。进而,可以由CPU执行这样的机器码(或者称为“微处理器指令”)。这种方式一般称为“编译执行”。
[0043]编译执行一般不具有跨平台的可扩展性。由于存在不同厂商、不同品牌和不同代
的CPU,而这些不同的CPU支持的指令集很多情况下是不同的,如x86指令集,ARM指令集等,且同一厂商同一品牌但不同代的CPU支持的指令集也不完全相同,因此,用同样的高级语言编写的同样的程序代码,在不同CPU上被编译器转换出来的机器码可能不同。具体的,编译器在转换高级语言编写的程序代码到机器码的过程中,会结合具体的CPU指令集的特点(如向量指令集等)进行优化以提升程序执行的速度,而此类优化往往与具体的CPU硬件相关。这样,同样的机器码,一个在x86平台上可以运行,但另一个在ARM上就可能无法运行;甚至同样是x86平台,随着时间的推移,指令集也不断丰富和扩展,这就导致不同代的x86平台运行的机器码也有不同。而且,由于执行机器码需要由操作系统内核对CPU进行调度,因此即使是同样的硬件,在不同操作系统下支持运行的机器码也可能不同。
[0044]不同于编译执行,还存在一种“解释执行”的程序运行方式。例如对于Java、C#等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言的字节码(ByteCode)。
[0045]比如Java语言,将Java源代码通过Java的编译器编译成标准的字节码,这里编译器不针对任何实际的硬件处理器的指令集,而是本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种优化wasm字节码的方法,包括:读取wasm字节码并解析,得到wasm模块对象;根据解析得到的wasm模块对象创建线性内存并填充线性内存;执行所述wasm模块对象中的start函数,并根据start函数的执行结果修改线性内存;采用修改后的线性内存中的数据替换wasm模块对象中的对应数据段;编码替换数据段后的wasm模块并保存为wasm字节码。2.如权利要求1所述的方法,在所述编码前还包括去除wasm模块对象中的start函数。3.如权利要求1所述的方法,所述去除wasm模块对象中的start函数,包括:将start函数的启动标记删除;或,将start函数的内容整体去除。4.如权利要求1所述的方法,所述解析得到的wasm模块对象存储于受管内存中或受管内存以外的内存中。5.如权利要求4所述的方法,采用修改后的线性内存中的数据替换存储于受管内存中或受管内存以外的内存中的wasm模块对象中的对应数据段。6.如权利要求1所述的方法,所述采用修改后的线性内存中的数据替换wasm模块对象中的对应数据段,包括:将start函数执行后导致线性内存中变化的部分替换掉wasm模块对象中的数据段中的对应部分;或,采用修改后的线性内存中的整体数据替换wasm模块对象中的对应数...
【专利技术属性】
技术研发人员:周维,张磊,
申请(专利权)人:蚂蚁区块链科技上海有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。