编译选项中加入此选项开启LTO。可通过-flto=n指定LTO的并发数,如使用auto可以指定与GNU make一致(如果可以获取)或是与当前机器线程数一致的并发数。
该选项将生成同时包含汇编信息和LTO信息的目标文件。并且在-ffat-lto-objects开启的情况下,允许通过-fno-lto选项,使用目标对象文件的汇编信息,来完成常规的链接,而不执行链接时优化。
该选项可以通过引入不同的分区策略从而加快编译速度。
该选项用以控制LTO对象文件中IR信息的压缩等级。
1 2 3 4 5 | // four.c int four() { return 4; } |
1 2 3 4 5 | // five.c int five() { return 5; } |
1 2 3 4 5 6 7 | // test.c extern int four(); extern int five(); int main() { return four() + five(); } |
1 2 3 4 5 6 | 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对象文件参与了局部范围内的链接时优化。