[C++] volatile 限定符

理论基础

为了说明volatile限定符的作用,我们先简单说下“i++”自增操作在汇编层面的细节。

即便是i++这样一个简单的操作,事实上也涉及到三个步骤(非原子):
* 从内存中加载到寄存器中;
* 实现add指令对寄存器进行操作;
* 将修改后的值写回到内存中;

volatile就是告诉编译器每次对i进行操作时,都先从内存中载入最新的数据值,而不是直接使用当前寄存器中的拷贝值。

相对来说,从事嵌入式工作的人会接触到的比较多,比如说DMA操作就可能在无需CPU的干预下直接从外部IO中搬运数据,当然RDMA等等。

C++中的volatile

一般来说,volatile在嵌入式等环境中用的比较多,也就是C中;
再加之C++对volatile进行了一些加强,所以还是有点陌生的。
接下来,简单梳理下C++中的volatile。

在C++中,volatile被提到了和const同等的地位:
* 类似const成员函数,只有volatile的成员函数才能被volatile对象所调用;
* 类似const,只有指向volatile的指针或引用才指向volatile对象;
* 合成的拷贝构造函数、赋值运算符接受的形参是const引用,因此合成的成员无法绑定到初始化volatile对象时

猜你喜欢

转载自blog.csdn.net/sai_j/article/details/79570261