C/C++中的volatile类型限定符

💡 原文英文,约2100词,阅读约需8分钟。
📝

内容提要

本文介绍了volatile类型限定符的使用,它用于指示编译器无法预测对象的修改方式,每次通过volatile限定类型的lvalue表达式进行的访问都被视为可观察的副作用。文章通过示例展示了在C/C++程序中使用volatile类型限定符的几种情况,并讨论了如何使用volatile类型限定符来禁用优化。

🎯

关键要点

  • volatile类型限定符用于指示编译器无法预测对象的修改方式。
  • 每次通过volatile限定类型的lvalue表达式进行的访问都被视为可观察的副作用。
  • 编译器对涉及volatile限定对象的代码仅进行有限的优化。
  • 示例展示了在C/C++程序中使用volatile类型限定符的几种情况。
  • 非volatile类型限定符的程序在优化级别0和3下生成的汇编代码有显著差异。
  • 优化级别0的汇编代码详细描述了程序的每一步操作。
  • 优化级别3的汇编代码简化了程序,因为没有副作用。
  • volatile类型限定符的程序在优化级别0下生成的汇编代码与非volatile版本相同。
  • 在优化级别3下,volatile版本的程序仍然执行整数加载操作,但移除了加法操作。
  • volatile类型限定符通常用于声明可能被硬件或其他线程修改的变量。
  • 例如,内存映射I/O寄存器和信号处理程序修改的变量通常声明为volatile。
  • 如果不使用volatile类型限定符,程序可能会优化掉重要的操作。
➡️

继续阅读