Met*_*est 4 c compiler-construction optimization gcc
我的问题是哪个级别的编译器应用优化.它是在不同的代码文件级别?如果是这种情况,那么它是否比在整个代码中应用它更低效?其次,当一个源文件没有进行优化编译然后与一个-O3级优化链接时会发生什么?
我特别感兴趣知道gcc如何处理这些事情.
可以使用单独的优化标志编译单个翻译单元,这通常不是问题.编译时优化通常仅影响一个TU内的可见代码.
该规则的一个例外是标志-fwhole-program
,它表示您的源代码构成整个程序并允许更积极的优化:
gcc -o prog *.c -O3 -fwhole-program -s
Run Code Online (Sandbox Code Playgroud)
也就是说,GCC最近在链接时引入了另一层优化; 使用它,用-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
Run Code Online (Sandbox Code Playgroud)
最后,您还-O*
可以在链接阶段指定一个独立选项,但我不知道这是否有所不同.
另请注意,预编译的头文件无法独立优化; 只有使用与TU相同的优化设置编译PCH才符合条件.
归档时间: |
|
查看次数: |
368 次 |
最近记录: |