一种应用调用的方法及装置制造方法及图纸

技术编号:38660042 阅读:14 留言:0更新日期:2023-09-02 22:44
本说明书公开了一种应用调用的方法及装置。首先,获取目标应用模块的应用代码对应的WebAssembly字节码。其次,从全局线性内存空间中为目标应用模块分配线性内存子空间,将应用代码中的各变量存放到线性内存子空间。而后,在目标应用模块调用其他应用模块的目标函数的过程中,将目标应用模块的参数存放到虚拟机栈。读取虚拟机栈中的参数输入给目标函数,若确定参数为线性内存子空间的偏移量,则按照线性内存子空间的偏移量,从线性内存子空间中读取与参数对应的变量的取值。最后,根据与参数对应的变量的取值,执行针对目标函数的函数调用。本方法可以在各应用模块之间传递正确的参数,并降低内存资源的消耗。并降低内存资源的消耗。并降低内存资源的消耗。

【技术实现步骤摘要】
一种应用调用的方法及装置


[0001]本说明书涉及计算机
,尤其涉及一种应用调用的方法及装置。

技术介绍

[0002]WebAssembly是一种能够将其他编程语言编译为浏览器可执行的二进制文件的技术。例如,为诸如C/C++等语言提供一个编译目标,以便它们可以在Web上运行。也就是说,WebAssembly并不是一门编程语言,而是一份字节码标准,需要用高级编程语言编译出字节码放到WebAssembly虚拟机中才能运行。
[0003]目前在资源受限的智能卡或SE设备上执行WebAssembly字节码时,会为每个模块分配独立的线性内存,以供全局变量、局部数组/结构体使用。但是,这会导致内存资源消耗较大,对资源较小的智能卡或SE设备来说,这种内存资源的消耗是不可接受的。
[0004]并且,在模块间进行函数调用的过程中,传递的参数为指针、数组、结构体等类型时,在虚拟机栈中传递的参数为线性内存的偏移量(offset)。由于,每个模块对应有独立的线性内存,模块在从虚拟机栈中读取线性内存的偏移量后,是基于自身的线性内存确定传递的参数,这会导致模块间无法正确的传递参数。
[0005]因此,如何在模块间传递正确的参数,并降低内存资源的消耗,则是一个亟待解决的问题。

技术实现思路

[0006]本说明书提供一种应用调用的方法、装置、电子设备及机器可读存储介质,以在模块间传递正确的参数,并降低内存资源的消耗。
[0007]本说明书采用下述技术方案:本说明书提供了一种应用调用的方法,所述应用包含多个应用模块;所述方法应用于电子设备上搭载的用于运行所述应用的虚拟机,所述虚拟机的内存空间包括为所述应用包含的多个应用模块分配的全局线性内存空间,包括:获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码;根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间;执行所述目标应用模块的应用代码对应的WebAssembly字节码,在所述目标应用模块调用其他应用模块的目标函数的过程中,将所述目标函数所需的所述目标应用模块的参数存放到所述虚拟机栈;读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述线性内存子空间的偏移量,则按照所述线性内存子空间的偏移量,从所述线性内存子空间中读取与所述参数对应的变量的取值;
根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用。
[0008]可选地,所述电子设备包括:资源受限设备。
[0009]可选地,所述内存空间还包括:辅助栈空间;在根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用之前,所述方法还包括:根据所述目标函数中的各变量的大小,计算所述目标函数所需的辅助栈空间的大小,并从所述辅助栈空间中为所述目标函数分配辅助栈子空间,将所述目标函数中的各变量存放到辅助栈子空间;读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述辅助栈子空间的偏移量,则按照所述辅助栈子空间的偏移量,从所述辅助栈子空间中读取与所述参数对应的变量的取值。
[0010]可选地,在读取与所述参数对应的变量的取值之前,包括:确定与所述线性内存子空间对应的结束偏移量,所述结束偏移量用于表示所述线性内存子空间中的偏移量最大的变量的偏移量与所述偏移量最大的变量所占用的线性内存空间的大小之和确定出的内存地址;确定所述参数为所述线性内存子空间的偏移量,包括:若与所述参数对应的偏移量不大于所述结束偏移量,则确定所述参数为所述线性内存子空间的偏移量;确定所述参数为所述辅助栈子空间的偏移量,包括:若与所述参数对应的偏移量大于所述结束偏移量,则确定所述参数为所述辅助栈子空间的偏移量。
[0011]可选地,在从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间之前,所述方法还包括:按照预设的空间参数,对所述内存空间进行划分,得到全局线性内存空间以及辅助栈空间,所述空间参数包括:全局线性内存空间的起始内存地址、全局线性内存空间的大小、全局线性内存空间的结束内存地址,辅助栈空间的起始内存地址以及辅助栈空间的大小。
[0012]可选地,所述虚拟机包含有用于并行运行应用的若干逻辑通道;根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间,包括:针对各个逻辑通道运行的应用,获取多个应用模块中,该逻辑通道运行的的目标应用模块的应用代码对应的WebAssembly字节码;根据该逻辑通道运行的目标应用模块的应用代码中的各变量的大小,计算该逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小;根据各逻辑通道的编号以及各逻辑通道运行的目标应用模块的应用代码所需的线性内存空间的大小,按照逻辑通道打开的顺序,从所述全局线性内存空间中为各逻辑通道运行的目标应用模块分配线性内存子空间,将各逻辑通道运行的目标应用模块的应用代码中的各变量存放到所述线性内存子空间。
[0013]可选地,所述虚拟机包含有用于并行运行应用的若干逻辑通道;根据所述目标函数中的各变量的大小,计算所述目标函数所需的辅助栈空间的大小,并从所述辅助栈空间中为所述目标函数分配辅助栈子空间,将所述目标函数中的各变量存放到辅助栈子空间,包括:根据各个逻辑通道运行的目标应用模块调用的其他应用模块的目标函数中的各变量的大小,计算各个逻辑通道调用的目标函数所需的辅助栈子空间的大小;针对各个逻辑通道调用的目标函数,在该逻辑通道调用目标函数时,将生成的与该逻辑通道调用的目标函数对应的虚拟机栈帧压入帧栈,并根据该逻辑通道调用的目标函数所需的辅助栈子空间的大小,从所述辅助栈空间中为该逻辑通道调用的目标函数分配辅助栈子空间,将该逻辑通道调用的目标函数中的各变量存放到辅助栈子空间;在该逻辑通道调用目标函数结束时,销毁所述帧栈中的与该逻辑通道调用的目标函数对应的虚拟机栈帧,并释放与该逻辑通道调用的目标函数对应的辅助栈子空间,将与该逻辑通道调用的目标函数对应的辅助栈子空间中的各变量进行清除。
[0014]可选地,所述其他应用模块的目标函数包括:库模块的接口函数以及其他应用模块的共享服务函数,所述库模块用于表示封装特定功能的模块,所述共享服务函数用于表示访问其他应用模块与所述目标应用模块共享的数据实例的函数。
[0015]本说明书提供了一种应用调用的装置,所述应用包含多个应用模块,所述装置应用于电子设备上搭载的用于运行所述应用的虚拟机,所述虚拟机的内存空间包括为所述应用包含的多个应用模块分配的全局线性内存空间,包括:获取模块,用于获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码;计算模块,用于根据所述目标应用模块的应用代码中本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种应用调用的方法,所述应用包含多个应用模块;所述方法应用于电子设备上搭载的用于运行所述应用的虚拟机,所述虚拟机的内存空间包括为所述应用包含的多个应用模块分配的全局线性内存空间,包括:获取与所述多个应用模块中的目标应用模块的应用代码对应的WebAssembly字节码;根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间;执行所述目标应用模块的应用代码对应的WebAssembly字节码,在所述目标应用模块调用其他应用模块的目标函数的过程中,将所述目标函数所需的所述目标应用模块的参数存放到所述虚拟机栈;读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述线性内存子空间的偏移量,则按照所述线性内存子空间的偏移量,从所述线性内存子空间中读取与所述参数对应的变量的取值;根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用。2.如权利要求1所述的方法,所述电子设备包括:资源受限设备。3.如权利要求1所述的方法,所述内存空间还包括:辅助栈空间;在根据与所述参数对应的变量的取值,执行针对所述目标函数的函数调用之前,所述方法还包括:根据所述目标函数中的各变量的大小,计算所述目标函数所需的辅助栈空间的大小,并从所述辅助栈空间中为所述目标函数分配辅助栈子空间,将所述目标函数中的各变量存放到辅助栈子空间;读取所述虚拟机栈中的所述参数输入给所述目标函数,若确定所述参数为所述辅助栈子空间的偏移量,则按照所述辅助栈子空间的偏移量,从所述辅助栈子空间中读取与所述参数对应的变量的取值。4.如权利要求3所述的方法,在读取与所述参数对应的变量的取值之前,包括:确定与所述线性内存子空间对应的结束偏移量,所述结束偏移量用于表示所述线性内存子空间中的偏移量最大的变量的偏移量与所述偏移量最大的变量所占用的线性内存空间的大小之和确定出的内存地址;确定所述参数为所述线性内存子空间的偏移量,包括:若与所述参数对应的偏移量不大于所述结束偏移量,则确定所述参数为所述线性内存子空间的偏移量;确定所述参数为所述辅助栈子空间的偏移量,包括:若与所述参数对应的偏移量大于所述结束偏移量,则确定所述参数为所述辅助栈子空间的偏移量。5.如权利要求3所述的方法,在从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间之前,所述方法还包括:按照预设的空间参数,对所述内存空间进行划分,得到全局线性内存空间以及辅助栈空间,所述空间参数包括:全局线性内存空间的起始内存地址、全局线性内存空间的大小、全局线性内存空间的结束内存地址,辅助栈空间的起始内存地址以及辅助栈空间的大小。
6.如权利要求1所述的方法,所述虚拟机包含有用于并行运行应用的若干逻辑通道;根据所述目标应用模块的应用代码中的各变量的大小,计算所述应用代码所需的线性内存空间的大小,并从所述全局线性内存空间中为所述目标应用模块分配线性内存子空间,将所述目标应用模块的应用代码中的各变量存放到所述线性内存子空间,包括:针对各个逻辑通道运行的应用,获取多个应用模块中,该逻辑通道运行的目标应用模块的应用代码对应的WebAssembly字节码;根据该逻辑通道运行的目标应用模块的应用代码中的各变量的大...

【专利技术属性】
技术研发人员:刘宏梅高景阳
申请(专利权)人:北京中电华大电子设计有限责任公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1