谈谈我理解和总结的volatile关键字吧,volatile关键字是C语言不常用的一个关键字,估计很多人都没听说过,我们项目中由于多线程设计的时候也是用到了volatile关键字,特此总结一下:
1,首先说一下编译器优化。
int i=5;
int a=i;
......
int b=i;
编译器会将i放进寄存器,b会直接从寄存器中取值。编译器做这样的优化是为了快。但是这样会有问题,一旦i所在的内存改变了,这样岂不是得到的错误的结果,所以为了避免编译器优化产生错误结果,volatile关键字可以被用来申明i。
2,应用场景,我所能用到的应用场景就是,多线程情况下,如果一个变量经常被改变,是需要将它申明为volatile类型的。
3,典型面试题,如下:
int square(volatile int * ptr){
int a=*ptr;
int b=*ptr;
return a*b;
}
这么申明是错的,因为ptr指向的记录可能已经变了,那样的话就不是求平方了。
int square(volatile int * ptr){
int a=*ptr;
return a*a;
}
(本文完)