17

我试图用下一个标志编译我的源代码:
1. -flto
2. -flto -ffat-lto-objects
3.-flto -fno-fat-lto-objects

第三个提供slim了文档中编写的优化 LTO 代码,但我看不出第一个和第二个输出程序集文件有任何区别,为什么?

操作系统:linux
编译器:GCC 4.7

4

2 回答 2

22

胖目标文件和非胖目标文件的区别在于胖目标文件既包含中间语言也包含正常编译的代码。在链接时,如果您在没有 的情况下调用编译器-flto,胖对象将作为普通对象文件处理(并丢弃 LTO 信息),而瘦对象将调用 LTO 优化器,因为没有它就无法处理它们。

如果你同时编译和链接-flto,fat 和 slim 对象都应该给你相同的二进制文件,只是 slim 对象会更小更快编译,因为你会避免冗余代码生成。

于 2015-03-29T06:38:26.197 回答
3

可能它会对某人有所帮助:
接下来写道:

当前的实现只产生“胖”对象,有效地使编译时间加倍并将文件大小增加到原始大小的 5 倍

所以我认为这是主要原因。

于 2012-12-10T11:07:28.457 回答