gcc优化细节

  • GCC优化概述

GCC有很多优化选项,一般包括O1,O2, O3,Os,Og等。

一般很容易通过在线手册找到对应gcc版本的上述优化选项的细节。

除了开启一些选项之外,GCC的优化也设置一些parmas。

例如gcc-4.6.1的优化选项细节可以从下面的网站获得:

http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Optimize-Options.html#Optimize-Options

  • 获得本机安装的gcc的优化细节

由于编译的具体细节除了因不同版本有区别外,还与gcc release的时候的编译参数,目标平台(例如AIX,Linux, Solaris等)版本等有关。那么有什么办法获得本机当前安装的gcc的优化细节呢?可以通过以下命令: 

  
  
  
  
  1. gcc -Q --help=optimizers  

查看开启和关闭了哪些选项。

通过以下命令:

  
  
  
  
  1. gcc -Q --help=params 

可以查看有哪些params,遗憾的是我仍然不知道每个O优化到底如何设置了这些params。

哪位童鞋知道的话别忘告诉我一声!

例如,下面的命令序列可以帮助我们获得O3比O2多开启了哪些选项。

  
  
  
  
  1. gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 
  2. gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 
  3. diff /tmp/O2-opts /tmp/O3-opts | grep enabled 
  • 局部优化/禁止优化

有时候,我们希望对某个函数或者某块代码添加自己的优化选项

这个可以通过下面的宏实现:

对代码块的优化/禁止优化:

  
  
  
  
  1. #pragma GCC push_options 
  2. #pragma GCC optimize ("O0") 
  3.  
  4. your code 
  5.  
  6. #pragma GCC pop_options 
  7. to disable optimizations since GCC 4.4.  

对函数的优化/禁止优化

  
  
  
  
  1. __attribute__((optimize("O0"))) 

但是我在AIX机器上测试的结果似乎是上述优化只对当前的那个文件有效,不能进行块、或者函数的局部限制。

 

【参考资料】

http://gcc.gnu.org/gcc-4.3/changes.html

http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Optimize-Options.html#Optimize-Options

http://lamp.linux.gov.cn/Linux/optimize_guide.html

http://forum.andestech.com/viewtopic.php?f=16&t=225

 

 

 

 

 

你可能感兴趣的:(优化,gcc)