C中的volatile用法

volatile关键字用于指示编译器不要对特定变量进行优化,因为它可能会在程序运行时被外部改变。这通常适用于多线程环境、并发编程或与硬件交互的场景。使用volatile可以确保每次访问变量时都从内存中读取最新值,防止因编译器优化导致的错误。在面试中,了解volatile的使用和重要性是区分C程序员和嵌入式系统程序员的关键。
摘要由CSDN通过智能技术生成

C中的volatile用法

.volatile的本质:

1> 告诉compiler不能做任何优化

编译器优化

在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。

当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。

当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。

比如要往某一地址送两指令: 

int *ip =...; //设备地址 
*ip = 1; //第一个指令 
*ip = 2; //第二个指令

以上程序compiler可能做优化而成: 

int *ip = ...; 
*ip = 2; 

结果第一个指令丢失。如果用volatile, compiler就不允许做任何的优化,从而保证程序的原意: 

volatile int *ip = ...; 
*ip = 1; 
*ip = 2; 

即使你要compiler做优化,它也不会把两次付值语句间化为一。它只能做其它的优化。这对device driver程序员很有用。

2>表示用vol

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值