volatile
关键字的作用是告诉编译器不要对标记为 volatile
的变量进行优化,确保每次访问该变量都从内存中读取或写入。volatile
关键字一般用在以下情况:- 并发访问变量:当多个线程或中断服务例程都可能访问同一个变量时,为了确保每次访问都获取最新值或更新值,可以使用
volatile
修饰该变量。
- 硬件寄存器:当访问硬件寄存器或内存映射 I/O 时,由于这些操作可能被外部设备或硬件修改,因此需要使用
volatile
来确保读写操作的正确性。
- 防止编译器优化:某些情况下,编译器可能会进行优化,认为某些变量在某段代码中不会发生变化,从而省略对该变量的读取操作。但是,如果这个变量实际上被其他非本地代码修改了,这可能导致程序错误。使用
volatile
可以防止这种优化,确保每次访问都从内存中读取变量的值。
volatile
可以和 const
一起使用吗?可以, const
指定了当前程序不会修改对应内存的值,这不意味着 volatile
没有用了,因为其他外部程序可以修改。