在哪个级别应用了编译器优化?

时间:2011-07-26 16:41:38

标签: c optimization gcc compiler-construction

我的问题是哪个级别的编译器应用优化。它是在不同的代码文件级别?如果是这种情况,那么它是否比在整个代码中应用它更低效?其次,当一个源文件没有进行优化编译然后与一个-O3级优化链接时会发生什么?

我特别感兴趣知道gcc如何处理这些事情。

1 个答案:

答案 0 :(得分:5)

可以使用单独的优化标志编译单个翻译单元,这通常不是问题。编译时优化通常只会影响一个TU中的可见代码。

该规则的一个例外是标记-fwhole-program,表示您的源代码构成整个程序并允许更积极的优化:

gcc -o prog *.c -O3 -fwhole-program -s

尽管如此,GCC最近在 link 时引入了另一层优化;要使用它,用-flto(GCC 4.6)编译所有内容。但是,这也与每个TU的优化标志无关:

gcc -c module1.c -flto -O2
gcc -c module2.c -flto -O3 -fno-strict-aliasing
gcc -c module3.c -flto -O0
gcc -c module4.c -O1
gcc -o prog module*.o -flto -s

最后,您还可以在链接阶段指定一个独立的-O*选项,但我不知道这是否有所不同。

另请注意,预编译的头文件无法独立验证;只有使用与TU相同的优化设置编译PCH才符合条件。