[发明专利]用于动态代码优化的差异静态分析有效

专利信息
申请号: 201880040815.9 申请日: 2018-05-30
公开(公告)号: CN110770698B 公开(公告)日: 2023-10-17
发明(设计)人: M·A·布朗;D·C·赖顿;蔡美琴;S·M·F·拉曼;张毅;I·M·比尔曼;E·詹奇沃多杰;D·A·哈特格拉斯;D·M·吉利斯 申请(专利权)人: 微软技术许可有限责任公司
主分类号: G06F8/41 分类号: G06F8/41;G06F9/455
代理公司: 北京市金杜律师事务所 11256 代理人: 姚杰
地址: 美国华*** 国省代码: 暂无信息
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 用于 动态 代码 优化 差异 静态 分析
【权利要求书】:

1.一种系统,包括:

至少一个处理器和存储器;

第一部件,所述第一部件当由所述至少一个处理器执行时,执行具有至少一个动态特征的程序的静态分析,并且将所述程序的至少一个程序元素与多个置信度指示符中的至少一个置信度指示符相关联,所述多个置信度指示符包括高置信度指示符和低置信度指示符,所述高置信度指示符将程序元素指定为具有在所述程序执行时被使用的高置信度,并且所述低置信度指示符将程序元素指定为具有在所述程序执行时被使用的低置信度;以及

第二部件,所述第二部件当由所述至少一个处理器执行时,基于所述至少一个置信度指示符来生成优化的本机代码。

2.根据权利要求1所述的系统,其中所述至少一个程序元素包括类型、方法和字段中的至少一个。

3.根据权利要求1所述的系统,其中所述第二部件生成包括热代码和冷代码的代码布局,其中所述热代码包括与高置信度指示符相关联的一个或多个方法,并且所述冷代码包括与低置信度指示符相关联的一个或多个方法。

4.根据权利要求1所述的系统,

还包括语言编译器,所述语言编译器生成所述程序的中间语言代码,

其中所述第一部件执行所述程序的所述中间语言代码的静态分析。

5.根据权利要求1所述的系统,其中动态特征包括反射、后期绑定和通用类型的实例化中的一个或多个。

6.一种方法,包括:

静态地跟踪具有至少一个动态特征的程序的执行的流程,以确定哪些类型和类型成员被使用在所述程序中,其中静态跟踪发现由从根可到达的、用于执行的指令所需的每个依赖关系,并且发现在所述程序中的每个依赖关系的使用;

利用多个置信度指示符中的一个置信度指示符对在所述静态跟踪期间遇到的每种类型和类型成员进行分类,所述多个置信度指示符包括高置信度指示符和低置信度指示符,所述高置信度指示符指示类型和/或类型成员在所述程序执行时被使用的高置信度,并且所述低置信度指示符指示类型和/或类型成员在所述程序执行时被使用的低置信度;以及

基于与所述程序的类型和/或类型成员相关联的所述置信度指示符,为所述程序优化本机代码。

7.根据权利要求6所述的方法,其中所述类型和类型成员包括方法和字段。

8.根据权利要求6所述的方法,其中为所述程序优化所述本机代码还包括为与高置信度指示符相关联的一个或多个方法生成本机代码。

9.根据权利要求6所述的方法,其中所述动态特征包括以下项中的至少一项:在运行时创建能够被调用和被访问的类型实例,从组件中定位类型并创建类型的实例,以及在运行时对方法的调用。

10.根据权利要求6所述的方法,还包括:

将所述程序编译成中间语言代码,所述编译生成所述程序的元数据,所述元数据包括针对在所述编译期间已知的所述程序的每种类型和类型成员的一个或多个依赖关系,

其中所述静态跟踪从与类型和/或类型成员相关联的所述元数据中发现依赖关系。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于微软技术许可有限责任公司,未经微软技术许可有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201880040815.9/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top