为了使页面变脏(打开页面表条目中的脏位),我触摸页面的第一个字节,如下所示:
pageptr[0] = pageptr[0];
但是实际上,gcc将通过消除死存储来忽略该语句。为了防止gcc对其进行优化,我将语句重写如下:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
看起来the俩有效,但有些丑陋。我想知道是否有任何指令或语法具有相同的效果?而且我不想使用-O0
标志,因为它也会带来很大的性能损失。
8
@Mark -O0将停止优化,但也会降低程序性能。我只想防止此代码段的优化:P
—
ZelluX 2010年
我想在过去补充一点,即使使用
—
平滑软件
-O0
并不能防止无效代码“优化”,例如,当GCC检测到某些代码无效时,它只是将其删除。AFAIK这甚至是一个阶段-O0
……但这只是我的经验