鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

使用方式

选项-flto=

编译选项中加入此选项开启LTO。可通过-flto=n指定LTO的并发数,如使用auto可以指定与GNU make一致(如果可以获取)或是与当前机器线程数一致的并发数。

选项-ffat-lto-objects

该选项将生成同时包含汇编信息和LTO信息的目标文件。并且在-ffat-lto-objects开启的情况下,允许通过-fno-lto选项,使用目标对象文件的汇编信息,来完成常规的链接,而不执行链接时优化。

选项-flto-partion=1to1|balanced|max|one|none

该选项可以通过引入不同的分区策略从而加快编译速度。
1to1意味着分区与源文件一一对应;
balanced控制每个分区在规模上相等;
max会为每一个符号创建一个分区;
one会尽量生成一个分区;
none会直接跳过全程序分以及分区的环节。

选项-flto-compresson-level=n

该选项用以控制LTO对性文件中IR信息的压缩等级。

DEMO

// four.c
int four() {
  return 4;
}
// five.c
int five() {
  return 5;
}
// test.c
extern int four();
extern int five();
int main() {
  return four() + five();
}
gcc -O2 -flto test.c four.c five.c
# 或者
gcc -O2 -flto -c test.c
gcc -O2 -flto -c four.c
gcc -O2 -flto -c five.c
gcc test.o four.o five.o

对于上面这个案例,在使用 LTO 生成的可执行文件中,four() + five()会被内敛+常量折叠优化为立即数9,省略了函数调用与计算的步骤,这在非 LTO 模式下是无法实现的。 如果仅对four.c和test.c生成了 LTO 对象文件,最终结果便成了4 + five(),仅部分lto对象文件参与了局部范围内的链接时优化。