volatile 限定符

607次阅读
没有评论

共计 588 个字符,预计需要花费 2 分钟才能阅读完成。

volatile 限定符

直接处理硬件的程序常具有这样的数据成员,它们的值由程序本身直接控制之外的过程所控制。例如程序可以包含系统时钟更新的变量。当可以用编译器的控制或检测之外的方式改变对象值的时候,应该将对象声明为 volatile。关键字volatile 时给编译其的指示,指出对这样的对象不应该执行优化。

当要求使用 volatile 声明变量的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。其作用是让每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值。

注意事项:

  • volatile的确切含义与机器有关,只能通过阅读编译器文档来理解。使用 volatile 的程序在移到新的机器或编译器时通常必须改变。
  • 只能将 volatile 对象的地址赋给指向 volatile 的指针。
  • 除了基本类型外,对用户定义的类型也可以用 volatile 类型进行修饰;
  • C++ 中有一个 volatile 标识符的类只能访问它的接口的子集,一个由类实现者控制的子集。用户只能用 const_cast 来获得对类型接口的完全访问。此外 volatile 向 const 一样会从类传递到它的成员。

使用原则:

  • 存储其映射的硬件寄存器,接口传输的变量;
  • 中断服务程序中修改的供其他程序检测的变量;
  • 多任务环境下各任务间共享的 flag 等变量;

参考:C++ Primer(第 5 版)


IT 内容具有时效性,未避免更新后未同步,请点击查看最新内容:volatile 限定符
文章首发于:http://nebofeng.com/2021/04/12/volatile-%e9%99%90%e5%ae%9a%e7%ac%a6/
正文完
欢迎关注个人公众号
post-qrcode
 
HTML文本

本文链接:

a_yuan
版权声明:本站原创文章,由 a_yuan 2021-04-12发表,共计588字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码