您的位置:首页 > 编程语言 > C语言/C++

C语言中的volatile关键字

2014-09-16 18:53 169 查看
谈谈我理解和总结的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;
}


(本文完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: