一种代码链接优化方法技术

技术编号:35531643 阅读:14 留言:0更新日期:2022-11-09 14:55
本发明专利技术涉及一种代码链接优化方法,所述方法包括:获取程序的安装文件,所述安装文件中包含至少一个类;将安装文件安装到目标设备上,得到程序镜像,其中,对于安装文件中类的每个实例域,分配一个唯一的索引;对于安装文件中类的每个虚方法,如果其重写了祖先类中的虚方法,则使用祖先类中的虚方法的索引作为该虚方法的索引,否则,为其分配一个新的索引。为其分配一个新的索引。为其分配一个新的索引。

【技术实现步骤摘要】
一种代码链接优化方法


[0001]本专利技术涉及代码编译领域,尤其涉及一种代码链接优化方法。

技术介绍

[0002]基于符号的代码链接(symbol

based linking)被广泛应用于各种编程语言中,Java虚拟机(JVM)中也采用了此项技术,用于方法调用、数据域(field)访问以及其他操作。基于JVM的Java Card虚拟机(JCVM)因其运行在资源受限的智能卡上,对JVM中原有的代码链接方法进行优化,在代码转换时使用一种特殊的符号,即基于整数的令牌(token),作为Java代码中类(class)、方法(method)和域(field)的标识,从而移除在代码链接和代码运行过程中对常量池(constant pool)的依赖和符号解析,最终既减少程序所需安装空间又减少程序运行时间。但作为代价,JCVM为满足向后兼容性,对API的后续修改施加更为严格的限制,比如不能在一个外部可见类或接口中添加新的方法。
[0003]基于符号的代码链接,其核心内容是符号分配和符号解析,前者影响编译速度,后者影响运行效率。同时为满足符号在一定范围(scope)内具有唯一性的要求,符号的长度都会比较长。对于智能卡等资源受限的嵌入式设备,因为程序大多是在台式机上编译,然后再下载到智能卡上,所以符号解析的影响更大。符号解析的主要工作就是通过比较符号获得被引用类、方法或域的地址。符号越长,比较就越耗时,进而导致指令的执行时间也相应变长。

技术实现思路

[0004]本专利技术的目的是提供一种代码链接优化方法,旨在通过在程序安装过程中将符号转换成一个索引(比如1字节整数或其他可以快速比较的数据类型),并在指令执行过程中通过比较该索引,而不是原来比较长的符号来减少符号解析的时间,进而减少指令的执行时间。
[0005]第一方面,提供了一种代码链接优化方法,包括:
[0006]获取程序的安装文件,所述安装文件中包含至少一个类;
[0007]将安装文件安装到目标设备上,得到程序镜像,其中,对于安装文件中类的每个实例域,分配一个唯一的索引;对于安装文件中类的每个虚方法,如果其重写了祖先类中的虚方法,则使用祖先类中的虚方法的索引作为该虚方法的索引,否则,为其分配一个新的索引。
[0008]在一种可能的实施方式中,所述索引为整数。
[0009]在一种可能的实施方式中,所述将安装文件安装到目标设备上,得到程序镜像,还包括:
[0010]对于每个引用实例域的指令,使用分配给它的索引替换指令中原有的操作数;对于每个调用虚方法的指令,使用分配给它的索引替换指令中原有的操作数。
[0011]在一种可能的实施方式中,所述程序镜像包括第一数据结构和第二数据结构,所
述第一数据结构用于保存为所述实例域分配的索引,所述第二数据结构用于保存为所述虚方法分配的索引。
[0012]在一种可能的实施方式中,所述获取程序的安装文件,包括:
[0013]获取程序的源代码,将源代码进行编译和转换,得到程序的安装文件,其中,将程序的类、方法和域的符号保存到安装文件中,其中,所述域包括实例域,所述方法包括虚方法。
[0014]在一种可能的实施方式中,所述安装文件包括第三数据结构和第四数据结构,所述第三数据结构用于保存所述域的符号,所述第四数据结构用于保存所述方法的符号。
[0015]在一种可能的实施方式中,所述实例域的索引与实例域的符号一一对应;所述虚方法的索引与虚方法的符号一一对应。
[0016]在一种可能的实施方式中,在将安装文件安装到目标设备上,得到程序镜像之后,所述方法还包括:
[0017]运行程序,对于访问实例域的指令,使用操作数中的索引直接访问对应的实例域;对于调用虚方法的指令,使用操作数中的索引和类的元数据中的虚方法表进行比较,获得实际调用虚方法的地址,并调用该虚方法。
[0018]本专利技术提出的一种代码链接优化方法,通过在程序安装过程中将符号转换成一个索引,并在指令执行过程中通过比较该索引,而不是原来比较长的符号来减少符号解析的时间,进而减少指令的执行时间。同JCVM中采用的基于令牌的代码链接相比,虽然本专利技术需要更多的安装空间用来保存符号和符号与索引之间的映射关系,但因为在安装过程中仍使用符号进行链接,所以拥有更宽松的兼容性要求,在后续使用过程中更容易修改API来满足不断变化的需求。而且随着芯片制造技术的不断发展,片上存储的容量不断提升,需要更多安装空间的这一短处几乎可以忽略。
附图说明
[0019]图1为本专利技术实施例公开的程序执行的流程示意图;
[0020]图2为本专利技术实施例公开的一种代码链接优化方法的流程图;
[0021]图3为本专利技术实施例公开的一种接口的转换和链接的代码的示意图;
[0022]图4为本专利技术实施例公开的一种类的转换和链接的代码的示意图;
[0023]图5为本专利技术实施例公开的一种对虚函数调用指令和实例域访问指令的转换的代码的示意图;
[0024]图6为本专利技术实施例公开的一种对虚函数调用指令和域访问指令引进行链接的代码的示意图;
[0025]图7为本专利技术实施例公开的一种添加虚方法后并不影响程序的兼容性的代码的示意图。
具体实施方式
[0026]为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员
在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0027]为便于对本专利技术实施例的理解,下面将结合附图以具体实施例做进一步的解释说明,实施例并不构成对本专利技术实施例的限定。
[0028]图1为本专利技术实施例公开的程序执行的流程示意图。
[0029]如图1所示,当前源程序经过编译和转换操作,得到安装文件;安装文件经过安装和链接操作,安装到设备上,得到程序镜像;运行程序镜像中的程序。
[0030]图2为本专利技术实施例公开的一种代码链接优化方法的流程图。
[0031]在步骤S202,获取程序的安装文件,所述安装文件中包含至少一个类,每个类里包含零个或多个实例域(instance field),以及包含零个或多个虚方法(virtual method)或虚函数。
[0032]可以理解,方法和函数为实质相同的概念,代表一段具有输入和输出的相对独立的子程序,区别仅在于在不同的编程语言中使用的名称不同。例如,在C语言中称为函数,在Java语言中则称为方法。为便于表述,以下涉及到方法或函数的表述中,统一使用方法一词。
[0033]在步骤S203,将安装文件安装到目标设备上,得到程序镜像,其中,对于安装文件中类的每个实例域,分配一个唯一的索引;对于安装文件中类的每个虚方法,如果其重写(override)了祖先类中的虚方法,则使用本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码链接优化方法,其特征在于,所述方法包括:获取程序的安装文件,所述安装文件中包含至少一个类;将安装文件安装到目标设备上,得到程序镜像,其中,对于安装文件中类的每个实例域,分配一个唯一的索引;对于安装文件中类的每个虚方法,如果其重写了祖先类中的虚方法,则使用祖先类中的虚方法的索引作为该虚方法的索引,否则,为其分配一个新的索引。2.根据权利要求1所述的方法,其特征在于,所述索引为整数。3.根据权利要求1所述的方法,其特征在于,所述将安装文件安装到目标设备上,得到程序镜像,还包括:对于每个引用实例域的指令,使用分配给它的索引替换指令中原有的操作数;对于每个调用虚方法的指令,使用分配给它的索引替换指令中原有的操作数。4.根据权利要求1所述的方法,其特征在于,所述程序镜像包括第一数据结构和第二数据结构,所述第一数据结构用于保存为所述实例域分配的索引,所述第二数据结构用于保存为所述虚方法分配的索引。5.根...

【专利技术属性】
技术研发人员:沈英哲庹凌云王文东陈远建吕彦辉彭文凭
申请(专利权)人:北京熵核科技有限公司
类型:发明
国别省市:

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

1