C语言中的volatile关键字

谈谈我理解和总结的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;
}

(本文完)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值