我尝试编译以使用下一个标志汇编我的源代码:
1. -flto
2. -flto -ffat-lto-objects
3. -flto -fno-fat-lto-objects
第三个提供了优化的slim
LTO代码,如文档中所述,但我看不出输出汇编文件在第一个和第二个之间有什么区别,为什么?
OS:linux
编译器:GCC 4.7
答案 0 :(得分:13)
胖和非胖目标文件之间的区别在于胖目标文件既包含中间语言,也包含正常编译的代码。在链接时,如果你在不使用-flto的情况下调用编译器,胖对象将作为普通对象文件处理(并丢弃LTO信息),而超薄对象将使用LTO优化器,因为没有它就无法处理它们。
如果你们都使用-flto进行编译和链接,那么胖子和超薄对象都应该为你提供相同的二进制文件,只有细长的对象会更小更快编译,因为你将避免冗余的代码生成。
答案 1 :(得分:2)
可能对某人有帮助:
Here下一篇写道:
The current implementation only produces “fat” objects, effectively doubling compilation time and increasing file sizes up to 5x the original size
因此我认为这是主要原因。