这是一个
类型修饰符
,位置同
const
、
static
等。一个使用
volatile
修饰的变量,比如
volatile int i;
每次对该变量的直接引用,都会访问内存,而不是从寄存器中读取(如果其已经在寄存器中)。这样一来,
volatile
似乎没什么用处,反倒会使数据的读取相对变慢很多。但是,如果没有
volatile
,编译器可能会优化你的程序,使得数据从寄存器中读取,从而加快程序的运行,但如果这个变量是同其它进程/线程
共享
的,就可能造成数据的不一致。多线程情况下,你可以使用互斥机制来保证对共享数据访问的原子性。但是,在单片机等嵌入式环境中,硬件经常不会有这种
互斥机制
的支持,这时某些共享的数据(比如端口)就可能会产生不一致的情况。而使用
volatile
就会使编译器不对代码进行优化,每次对该变量的访问都会从内存中读取。
volatile
最新推荐文章于 2024-05-20 15:31:15 发布