C语言关键字volatile的作用

        C语言的关键字,volatile,表示易变的数据,这个变量前面加上volatile是一个安全保障措施,加上这个关键字的目的就是防止编译器优化.编译器优化如果设置为最低的时候,这个关键字没有用,如果提高优化等级,这个关键字是有用的.编译器优化是去除冗余代码,但是去除无用的繁杂代码,降低代码空间,提升运行效率,但是有时候编译器的优化会弄巧成拙.对变量加上volatile就是告诉编译器,无论干什么都原封不动的去执行,避免优化掉了.
        编译器会利用缓存来加速代码,比如要频繁的读取内存的某个变量,最常见的优化方法是先把变量转移到高速缓存里来,在STM32内核里,有个类似缓存的工作组寄存器,这些寄存器的访问速度最快,可以先把变量放到缓存里,需要读写的时候,直接访问缓存就行了,用完之后,再写回内存,这是一个优化方案.但是,如果程序中有多个线程,比如中断函数,在中断函数中,改变了这个原始变量,那可能缓存不知道更改了,下个程序还看缓存的变量,就会造成数据更改不同步的问题,这时采用在读取变量定义的前面加上一个volatile,告诉编译器这个变量是易变的,每次读取都要执行到位,要直接从内存中找,不要再用缓存优化了.
       总结:如果开启了编译器优化,在无意义加减变量,多线程更改变量,读写与硬件相关的存储器时,都需要加上volatile防止被编译器优化,如果默认不开启编译器优化的话,是否加volatile都一样.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值