我听说过编译器优化。
例如,当:
while(myBool)
doStuff();
编译器知道您不会在 while 循环中修改 myBool ,它只会读取 myBool 一次并且不会每次都检查它。
这可能会受到volatile
关键字的影响,对吗?
所以我试图“欺骗”编译器,它认为值没有改变。
int main()
{
struct st
{
int a;
int b; //I want to make difference by writing volatile here
}s;
s.b = 1;
while(s.b > 0)
{
*((&s.a)+1) = 0;
std::cout << "test" << std::endl;
}
}
但即使开启了全面优化(vs2012),这也不会欺骗编译器。这可能是非常蹩脚的把戏:)
我该如何欺骗它?甚至可能吗?
我的目标是创建简单的单线程程序,它使用使用的关键字打印“test”,volatile
并在没有关键字的情况下打印无限次的“test”。
编辑:不幸的是我不擅长汇编程序,所以如果首先优化内存读取,我真的无法阅读:)