一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种程序优化执行方法和装置与流程

2022-09-04 04:28:23 来源:中国专利 TAG:


1.本技术涉及计算机程序应用开发技术领域,特别涉及一种程序优化执行方法、装置、计算设备和计算机可读存储介质。


背景技术:

2.在申请人的在先申请cn 202210078151.3中,提出了一种用于unity平台的热更新方法和装置,在该申请中通过对il2cpp工具进行自定义改造以及为il2cpp工具增加自定义解释器,从而实现了一种新的热更新架构,将热更新程序集和主程序加载到同一运行时中,消除了类型系统不兼容问题,让热更新的代码与主程序代码在同一运行时中无缝运行。在该方案中,还存在如下场景,解释器代码与aot编译代码之间需要进行双向函数调用,比如,解释器需要调用aot编译代码中的函数,或者aot编译代码中有回调函数需要调用解释器中的函数,在进行此类操作时,存在诸多困难。


技术实现要素:

3.有鉴于此,本技术例提供了一种程序优化执行方法、装置、计算设备和计算机可读存储介质,以解决现有技术中存在的技术缺陷。
4.根据本技术实施例的第一方面,提供了一种程序优化执行方法,包括:
5.扫描相关类库,获取类库中的所有函数;
6.根据所述所有函数生成解释器代码与aot编译代码间的双向桥接函数集;
7.将所述桥接函数集与其他资源一起进行打包发布。
8.根据本技术实施例的第二方面,提供了一种程序优化执行装置,包括:
9.扫描单元,用于扫描相关类库,获取类库中的所有函数;
10.生成单元,用于根据所述所有函数生成解释器代码与aot编译代码间的双向桥接函数集;
11.发布单元,用于将所述桥接函数集与其他资源一起进行打包发布。
12.根据本技术实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述程序优化执行方法的步骤。
13.根据本技术实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述程序优化执行方法的步骤。
14.通过本技术实施例中的方法和装置,实现了解释器代码与aot编译代码之间的高效调用,在本技术实施例中提前对所有可能使用的函数进行扫描,根据函数的签名生成了双向调用的桥接函数,当调用发生时,无需第三方库直接使用桥接函数即可实现函数调用;为了进一步提高程序的执行效率,利用系统架构的函数签名共享特性,根据共享的函数签名得到共享桥接签名后,生成对应的桥接函数,从而无需对每一个函数都生成桥接函数,减少了生成的桥接函数的数量。
附图说明
15.图1是本技术实施例提供的计算设备的结构框图;
16.图2是本技术实施例提供的一种程序优化执行方法的流程示意图;
17.图3是本技术实施例提供的一种程序优化执行装置的结构示意图;
具体实施方式
18.在下面的描述中阐述了很多具体细节以便于充分理解本技术。但是本技术能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本技术内涵的情况下做类似推广,因此本技术不受下面公开的具体实施的限制。
19.在本技术一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术一个或多个实施例。在本技术一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本技术一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
20.应当理解,尽管在本技术一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“响应于确定”。
21.在本技术中,提供了一种程序优化执行方法及装置、计算设备和计算机可读存储介质,在下面的实施例中逐一进行详细说明。
22.图1示出了根据本技术一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。
23.计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
24.在本技术的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本技术范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
25.计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备100还可以是移动式或静止式的服务器。
26.在unity开发平台中,il2cpp是一种新的脚本后处理(scripting backend)方式,针对平台编译输出的il(中间语言)进行处理,将il语言转换为静态的c 代码,然后再由各个平台的c 编译器直接编译成能执行的原生汇编代码,从而实现unity的跨平台开发。这种方式除了执行效率快以外,还可以利用各个平台的c 编译器对代码执行编译期优化,这样可以进一步减小最终游戏的尺寸并提高游戏运行速度,因此,几乎所有基于unity的开发过程都使用了il2cpp工具。
27.其中,il2cpp主要由两部分组成:
28.·
aot(ahead of time)静态编译编译器(il2cpp.exe);
29.·
运行时库(libil2cpp);
30.aot编译器将il转换为c 代码,再交给各平台的c 编译器进行编译,由于使用的是aot静态编译,因此在编译时就必须完全确定需要用到的类型;运行时库则会提供诸如垃圾回收、线程/文件获取、内部调用直接修改托管数据结构的原生代的服务与抽象。
31.在申请的人在先申请cn 202210078151.3中,通过为il2cpp工具添加il解释器的方式使得il2cpp工具具备了aot编译器、运行时环境和il解释器功能,具有了多个不同平台的编译和热更新基础。其中,对于无需更新的代码使用aot静态编译成c 代码,进而被目标平台编译为本地可执行程序;对于热更新程序集中的代码,则通过il解释器进行解释执行。
32.在该方案中,还存在如下场景,在执行热更新代码时,解释器代码与aot编译代码之间需要进行双向函数调用。其中,aot编译代码与解释器的代码在参数传递和存储方式上是不一样的,比如解释器的函数调用aot代码中的函数时,解释器中函数的参数全部在解释器栈上,必须借助合适的办法才能将解释器的函数参数传递给aot代码中的函数。同样的,解释器无法直接获得aot回调函数的指定参数。在现有技术中,使用类似ffi类库可以实现上述功能,但是调用第三方类库执行的效率较低,影响了程序执行的速度。
33.因此,在本技术实施例中,为了解决上述问题,提出了一种程序优化执行方法和装置。
34.说明书附图1中的处理器120可以执行图2所示的程序优化执行方法中的步骤。图2中示出了实现程序优化执行方法的流程图,包括步骤202至步骤206。
35.步骤202:扫描相关类库,获取类库中的所有函数;
36.在该步骤中,对aot编译代码需要用到的所有类库进行扫描,获取所有的函数。其中aot编译代码需要用到的类库包括但不限于,.net framework基础库、unity引擎的核心类库和第三方库。
37.进一步的,获取热更新类库并进行扫描,获取热更新类库中所有的函数。
38.步骤204:根据获取的所有函数生成解释器代码与aot编译代码间的双向桥接函数集。
39.在该步骤中,根据获取的所有函数生成双向桥接函数,其中双向桥接函数包括在解释器代码中调用aot编译代码函数需要用到的桥接函数managed2nativecallxxx()和在aot编译代码中调用解释器函数需要用到的桥接函数native2managedcallxxx()。
40.进一步的,在上述桥接函数native2managedcallxxx()中,从调用者aot编译代码函数的栈中获取参数值、待调用的解释器函数的地址。随后在解释器中建立新栈,压入来自调用者的参数数据,进而根据函数地址、新建栈中的参数在解释器中进行解释执行,从而实
现在aot编译代码中调用解释器函数。
[0041][0042]
进一步的,在上述桥接函数managed2nativecallxxx()中,从调用者解释器的栈中获取待调用的aot编译代码中函数的地址、参数地址等数据。随后在解释器中根据该函数的地址对函数进行运行时初始化,进而根据参数地址获取参数值进行该函数的调用。
[0043][0044]
在另一种可行的实施方式中,在生成双向桥接函数时,根据扫描得到的所有函数
的不同签名生成对应的桥接函数。函数签名(function sginature),包含了一个函数的信息,包括函数名称、参数的类型、参数的个数、参数的顺序、返回值等信息,函数签名用于识别不同的函数。
[0045]
因此,在该实施方式中,根据获取的每一个函数签名生成双向的桥接函数,如下所示:
[0046][0047][0048]
其中,上述函数名中的i8,r8分别代表了int和double数据类型,其数量和顺序与函数签名中的参数对应。本领域技术人员应当知晓,上述桥接函数仅为例举而非穷举,桥接函数的数量与种类取决于扫描得到的所有函数的函数签名。
[0049]
进一步的,在所属的技术领域中,不同的系统架构如x64、arm64的平台中,存在函数签名共享机制,例如,bool,byte,sbyte,short,char,ushort,int,uint,long,ulong,intptr,uintptr,class类型,size为1、2、4、8的值类型以及所有引用类型如int&,vector3&都共享long类型签名。
[0050]
因此,例如下面的函数fun1-fun4:
[0051]
int fun1(int a,int b);
[0052]
int fun2(object a,long b);
[0053]
long fun3(long a,long b);
[0054]
object fun4(object a,object b);
[0055]
在函数签名共享机制下,可以共享一个long(long,long)签名,基于此可以为上述多个函数生成一个共同使用的桥接函数。因此在本实施方式中,获取所有函数后,进而根据系统架构的特性获取函数签名的共享桥接签名,再生成对应的桥接函数,从而减少了生成的桥接函数的数量。
[0056]
步骤206:将生成的桥接函数文件与其他资源一起进行打包发布。
[0057]
在一种可行的实施方式中,将生成的桥接函数集保存为文件,并与其他的资源,如程序运行需要的unity核心库、.net framework库、第三方库等等进行打包发布,进而跟随程序的安装被部署到客户端。
[0058]
进而在对客户端程序进行热更新时,具体的,在利用解释器执行热更新代码时,解释器代码与aot编译代码之间利用上述桥接函数文件中的桥接函数实现双向函数调用。
[0059]
进一步的,当桥接函数文件需要更新时,将新的桥接函数文件与热更新程序集一起发布到客户端。
[0060]
在上述实施方式中,热更新的代码与主程序代码在同一运行时中无缝运行,其中,对于无需更新的主程序代码通过aot静态编译本地可执行程序,热更新程序集中的代码则通过解释器进行解释执行;为了实现解释器代码与aot编译代码之间的高效调用,提前对所有可能使用的函数进行扫描,根据函数的签名生成了双向调用的桥接函数,当调用发生时无需第三方库,直接使用桥接函数即可实现函数调用;进一步的,利用系统架构的函数签名共享特性,根据共享的函数签名得到共享桥接签名后,生成对应的桥接函数,从而无需对每一个函数都生成桥接函数,减少了生成的桥接函数的数量,进一步提高了程序的执行效率。
[0061]
与上述方法实施例相对应,本技术还提供了一种程序优化执行装置的实施例,图3示出了本技术一个实施例的一种程序优化执行装置的结构示意图。如图3所示,该装置包括:
[0062]
扫描单元,用于扫描相关类库,获取类库中的所有函数;
[0063]
生成单元,用于根据所述所有函数生成解释器代码与aot编译代码间的双向桥接函数集;
[0064]
发布单元,用于将所述桥接函数集与其他资源一起进行打包发布。
[0065]
上述为本实施例的一种程序优化执行装置的示意性方案。需要说明的是,该程序优化执行装置的技术方案与上述的程序优化执行方法的技术方案属于同一构思,该程序优化执行装置的技术方案未详细描述的细节内容,均可以参见上述程序优化执行方法的技术方案的描述。
[0066]
本技术一实施例中还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述的程序优化执行方法的步骤。
[0067]
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的程序优化执行方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述程序优化执行方法的技术方案的描述。
[0068]
本技术一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述程序优化执行方法的步骤。
[0069]
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的程序优化执行方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述程序优化执行方法的技术方案的描述。
[0070]
上述对本技术特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0071]
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、
对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0072]
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本技术所必须的。
[0073]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0074]
以上公开的本技术优选实施例只是用于帮助阐述本技术。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本技术的内容,可作很多的修改和变化。本技术选取并具体描述这些实施例,是为了更好地解释本技术的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本技术。本技术仅受权利要求书及其全部范围和等效物的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献