中文
注册

特性介绍

背景

在传统编译流程中,gcc 将单个源文件(称谓一个编译单元)直接进行编译优化生成包含汇编代码的.o目标对象文件,并由链接器对这些.o文件进行符号表解析与重定位,链接成可执行文件。在这个过程中,拥有跨文件函数调用信息的链接器由于操作的是汇编代码,难以进行编译优化,而可以执行编译优化的环节,却没有跨文件的全局信息。这样的编译框架,虽然提高了编译效率,每次重新编译只需要编译修改过的少量编译单元,但也丢失了许多跨文件的优化机会.

LTO流程

LTO 设计的初衷就是希望能够在链接时,拥有跨编译单元的调用信息的时候,进行编译优化,提供更多的优化机会。为了达到这个目的,LTO 需要将编译优化所需的 IR 信息保留到链接时。在链接时,链接器会调用 LTO 插件,执行全程序分析,生成更加有效的优化决策,再经由编译优化生成更高效的IR,进一步转成包含汇编代码的目标对象文件,最后由链接器完成常规的链接工作。

分区与并行

由于需要处理全局的调用图,在执行LTO时往往需要更长的编译时间,有些时候,LTO的编译时间会达到非LTO的数倍。为了使 LTO 能够并行,以加快编译速度,分区模式出现了。在分区模式下,全局调用图会根据模块之间的关联性被拆分成若干个分区,各分区之间独立并行优化,是一种在编译时间和优化效果之间的平衡。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词