优化举个简单例子:
int i;
i=1;
i=2;
i=3;
i=4;
i=5;
i=6;
i=7;
i=8;
i=9;
i=10;
这段代码会被直接优化成
i=10;
连续10次给i赋值,只有最后一次才有意义。
前面的赋值没有意义,会被直接优化掉。
如果后面i也没有被使用,则变量i本身没有意义,直接优化掉。
最后编译出来的代码就是空。
进一步,把上面的赋值换成循环
int i;
for(i=1;i<10;i++);
这段代码也会被优化成
i=10;
循环相当于连续给i赋值9次,循环里面i的值是多少,是没有意义的,
最后循环退出时的i值才有意义,相当于最后一次的赋值i=10;
如果后面的程序没有用到i,则变量i本身没有意义,直接优化掉。
最后编译出来的代码就是空。
谨记:空循环是没有意义的,有点优化能力的编译器,都会将空循完全环优化掉。
如果需要延时,请加上volatile,或者调用编译器的延时函数,或者用编译参数禁止优化,或者使用内嵌汇编。
总之,不要使用没有volatile的空循环带实现延时,这是不规范的。
|