Aiur – ZelluX 的技术博客

Security, Kernel, Virtualization, Programming Languages

gcc中设置特定代码块的优化级别

with 2 comments

今天碰到一个gcc优化相关的问题,为了让一个页变成脏页(页表中dirty位被置上),需要执行下面这段代码:

uint32_t *page;
// ...
page[0] = page[0];

最后一行代码很有可能被gcc优化掉,因为这段代码看起来没有任何实际的作用。那么如何防止gcc对这段代码做优化呢?

设置gcc编译时优化级别为-O0肯定是不合适的,这样对程序性能影响会比较大。stackoverflow上的Dietrich Epp给出了一个强制类型转换的方案:

((unsigned char volatile *)page)[0] = page[0];

通过volatile关键字禁止gcc的优化,和我之前采用的方法类似。

Plow同学给出了另一个利用gcc 4.4特性的方法:

#pragma GCC push_options
#pragma GCC optimize ("O0")

your code

#pragma GCC pop_options

这里用到了gcc 4.4的特性Function Specific Option Pragmas,在特定代码前保存当前的编译选项,然后对特定的代码使用O0优化级别,最后再恢复之前保存的编译选项。

俺觉得这个特性有些场合下挺好用的,在这里分享下,虽然因为编译器版本问题最后我还是用了前面一种方法。

Related Posts

Written by zellux

February 8th, 2010 at 10:16 pm

Posted in Programming

Tagged with ,

2 Responses to 'gcc中设置特定代码块的优化级别'

Subscribe to comments with RSS or TrackBack to 'gcc中设置特定代码块的优化级别'.

  1. wordpress上编辑代码块的是用啥?

    [Reply]

    zellux Reply:

    一个js脚本,在浏览器端上色的,http://alexgorbatchev.com/wiki/

    [Reply]

    Zhongshu

    9 Feb 10 at 6:08 am

Leave a Reply

FireStats icon Powered by FireStatsBetter Tag Cloud