gcc中设置特定代码块的优化级别
2014-03-24 17:14
253 查看
今天碰到一个gcc优化相关的问题,为了让一个页变成脏页(页表中dirty位被置上),需要执行下面这段代码:
最后一行代码很有可能被gcc优化掉,因为这段代码看起来没有任何实际的作用。那么如何防止gcc对这段代码做优化呢?
设置gcc编译时优化级别为-O0肯定是不合适的,这样对程序性能影响会比较大。stackoverflow上的Dietrich Epp给出了一个强制类型转换的方案:
通过volatile关键字禁止gcc的优化,和我之前采用的方法类似。
Plow同学给出了另一个利用gcc 4.4特性的方法:
这里用到了gcc 4.4的特性Function Specific Option Pragmas,在特定代码前保存当前的编译选项,然后对特定的代码使用O0优化级别,最后再恢复之前保存的编译选项。
俺觉得这个特性有些场合下挺好用的,在这里分享下,虽然因为编译器版本问题最后我还是用了前面一种方法。
1 | uint32_t *page; |
2 | // ... |
3 | page[0] = page[0]; |
设置gcc编译时优化级别为-O0肯定是不合适的,这样对程序性能影响会比较大。stackoverflow上的Dietrich Epp给出了一个强制类型转换的方案:
1 | ((unsigned char volatile *)page)[0] = page[0]; |
Plow同学给出了另一个利用gcc 4.4特性的方法:
1 | #pragma GCC push_options |
2 | #pragma GCC optimize ("O0") |
3 |
4 | your code |
5 |
6 | #pragma GCC pop_options |
俺觉得这个特性有些场合下挺好用的,在这里分享下,虽然因为编译器版本问题最后我还是用了前面一种方法。
相关文章推荐
- gcc中设置特定代码块的优化级别
- GCC 设置部分代码的优化级别
- GCC 设置部分代码的优化级别
- GCC在C文件中设置pragma选项防止此文件的代码被优化
- GCC指定某个函数或某几个函数的优化级别
- gcc不同优化级别反汇编代码的分析
- unity3d移动平台性能优化专题(4):为不同性能的设备设置不同的性能级别
- vs2010 在函数级别设置优化
- WebSphere Studio Application Developer 5.0 优化设置
- GCC优化与返回Local Variables
- 三种级别的db2数据库字符集的设置与修改
- IDEA设置优化
- centos安装编译设置gcc4.8.1
- MySQL内存及虚拟内存优化设置
- git设置只允许特定类型的文件
- CentOS下MySql 5.0.x的安装、优化及安全设置(二)
- GCC编译优化指南
- Mysql的优化设置
- IDEA常用设置及优化