一个延时函数:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void delay(){
int i = 0;
int j = 0;
for(i = 0;i < 50000;i++){
for(j = 0;j < 50000;j++);
}
}
int main(int argc, char **argv){
printf("time = %ld\n",time(NULL));
delay();
printf("time = %ld\n",time(NULL));
return 0;
}
编译运行:
gcc volatile1.c
./a.out
运行结果,从结果可知,这个delay运行了3秒。
使用-O3编译,并运行
gcc volatile1.c
./a.out
执行结果如下,从结果可知delay函数被优化了。
为了不让delay中的i和j变量被优化,给它加volatile修饰,修改后的代码如下
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void delay(){
volatile int i = 0;
volatile int j = 0;
for(i = 0;i < 50000;i++){
for(j = 0;j < 50000;j++);
}
}
int main(int argc, char **argv){
printf("time = %ld\n",time(NULL));
delay();
printf("time = %ld\n",time(NULL));
return 0;
}
使用-O3编译,并运行
gcc volatile1.c
./a.out
执行结果如下,从结果可知delay函数没有被优化了。