gcc中设置特定代码块的优化级别
来源:互联网 发布:java设计模式原则 编辑:程序博客网 时间:2024/04/30 04:56
今天碰到一个gcc优化相关的问题,为了让一个页变成脏页(页表中dirty位被置上),需要执行下面这段代码:
1
uint32_t *page;
2
// ...
3
page[0] = page[0];
最后一行代码很有可能被gcc优化掉,因为这段代码看起来没有任何实际的作用。那么如何防止gcc对这段代码做优化呢?
设置gcc编译时优化级别为-O0肯定是不合适的,这样对程序性能影响会比较大。stackoverflow上的Dietrich Epp给出了一个强制类型转换的方案:
1
((unsigned
char
volatile
*)page)[0] = page[0];
通过volatile关键字禁止gcc的优化,和我之前采用的方法类似。
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 4.4的特性Function Specific Option Pragmas,在特定代码前保存当前的编译选项,然后对特定的代码使用O0优化级别,最后再恢复之前保存的编译选项。
俺觉得这个特性有些场合下挺好用的,在这里分享下,虽然因为编译器版本问题最后我还是用了前面一种方法。
0 0
- gcc中设置特定代码块的优化级别
- gcc中设置特定代码块的优化级别
- GCC 设置部分代码的优化级别
- GCC 设置部分代码的优化级别
- gcc不同优化级别反汇编代码的分析
- GCC在C文件中设置pragma选项防止此文件的代码被优化
- Spring Batch代码块级别的重试
- GCC 优化的 strlen() 代码
- ROS代码中设置消息日志级别
- 编译器级别的代码优化对比
- 编译器级别的代码优化对比
- Gcc中使用profile工具优化代码
- Gcc中使用profile工具优化代码
- 获取ini文件中所有块的特定字段值
- gcc或clang中消除特定警告的方法
- gcc或clang中消除特定警告的方法
- Ant中设置特定的jdk版本
- Ajax中一些特定代码的解释
- Adpter 更新 DataSet不起作用解决方法
- cocos2dx 判断点是否在任意凸多边形内(算法)
- 如何判断单链表里面是否有环
- android蓝牙开发(一)——蓝牙设置种常用的Intent
- 第三周作业
- gcc中设置特定代码块的优化级别
- 使用MyEclipse自动生成WebService客户端代码
- 【C++专题】static_cast, dynamic_cast, const_cast探讨
- 发现软驱设置为1.44M了,但实际上机箱内并无软驱
- Linux中断处理体系结构
- 如何分析解决Android ANR
- 【C++专题】C++引用与const引用
- struts2重要标签学习
- 阿里笔试题—战报交流