[发明专利]一种基于值流分析的Golang程序高效过程间逃逸分析方法在审
申请号: | 202210476822.1 | 申请日: | 2022-04-30 |
公开(公告)号: | CN114780105A | 公开(公告)日: | 2022-07-22 |
发明(设计)人: | 张迎周;密杰;卢跃 | 申请(专利权)人: | 南京邮电大学 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 南京禹为知识产权代理事务所(特殊普通合伙) 32272 | 代理人: | 马建军 |
地址: | 210003 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 分析 golang 程序 高效 过程 逃逸 方法 | ||
本发明公开了一种基于值流分析的Golang程序高效过程间逃逸分析方法,包括,对Golang程序进行预处理,得到基于静态单赋值形式的中间代码表示,创建过程间函数调用图和过程内控制流图;将函数调用图做逆拓扑排序,建立待分析函数序列,并对待分析函数进行是否涉及过程间调用判别;根据判别的不同分别计算目标函数的逃逸变量;基于函数调用图分析程序内的所有函数的逃逸变量,将所有分析函数的ESC进行合并得到最终的逃逸变量值的集合;基于SSA的代码中间表示进行Golang程序的逃逸分析,可扩展性高,方便后续做代码数据流分析。
技术领域
本发明涉及程序分析的技术领域,尤其涉及一种基于值流分析的Golang程序高效过程间逃逸分析方法。
背景技术
随着编程语言的不断发展和完善,程序执行时的性能开始受到越来越多的关注。为了提高程序的性能,经常需要用到优化技术。编译优化是指在程序编译过程中通过一定的方法或策略使系统或程序有关的性能提高的技术。目前很多主流编程语言的编译器中都拥有编译优化功能,一段程序需要经过编译生成可执行文件才能运行在相应的目标机器上。编译过程包含编译前端、编译后端优化和编译后端,提高编译优化的速度可以大大减少程序编译的时间,而逃逸分析技术是内存优化的技术和手段,也是编译器优化技术的一种。内存管理在软件工程中非常重要。例如,云服务运行在有内存使用限制的容器中,存在内存成本超过限制的风险。如今,越来越多的互联网公司开始关注内存管理和优化问题。
逃逸分析是指编译器通过分析指针变量的作用范围将原本分配在堆上的内存转移到栈上分配,而栈内存的访问效率要远远大于堆内存且栈上的内存会随着方法的运行结束而自动回收,因此栈式分配可以有效的提升程序的执行效率。由于逃逸分析需要做全局的数据流分析,很耗费时间,且逃逸分析的时间会影响整个编译的时间,那么如何在最短时间内找到更多的逃逸变量,最大程度上优化程序提高程序的执行效率是现阶段仍需要研究的重点。
编译器优化技术一直以来备受关注,逃逸分析技术也在各个版本中不断的迭代。现阶段主流编程语言的编译器中都默认开启了逃逸分析,例如Java虚拟机HotSopt VM中的JIT Compiler(Just In Time Compiler即时编译器)在运行时期进行逃逸分析,且在JDK1.8默认开启逃逸分析。C/C++编译器LLVM虽然没有默认开启逃逸分析,但是在LLVM后端优化的众多pass中也拥有逃逸分析的pass,可以手动开启逃逸分析对C/C++代码进行优化。Go程序的编译器Golang更是直接依赖逃逸分析技术在编译期来进行变量的内存管理。但是目前的逃逸分析效率依旧低下,尤其是过程间逃逸分析还没有一个很好的解决方案,因此本文结合值流图的思想缩小过程内逃逸分析的规模,利用数据流分析抽象值流图的构建过程,提高值流分析的精度,并结合函数式编程中高阶函数的思想抽象化逃逸变量的分析过程,降低逃逸分析的时间,提高过程间逃逸分析的精度,改善Golang程序的执行效率,这对于编译优化技术的改进具有十分重要的意义。
发明内容
本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。
鉴于上述现有基于值流分析的Golang程序高效过程间逃逸分析方法存在的问题,提出了本发明。
因此,本发明目的是提供一种基于值流分析的Golang程序高效过程间逃逸分析方法。
为解决上述技术问题,本发明提供如下技术方案:一种基于值流分析的Golang程序高效过程间逃逸分析方法,包括,
对Golang程序进行预处理,得到基于静态单赋值形式的中间代码表示,创建过程间函数调用图和过程内控制流图;
将函数调用图做逆拓扑排序,建立待分析函数序列,并对待分析函数进行是否涉及过程间调用判别;
根据判别的不同分别计算目标函数的逃逸变量;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京邮电大学,未经南京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210476822.1/2.html,转载请声明来源钻瓜专利网。