关键字volatile有什么含意? 并给出三个不同的例子。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

→下面是volatile变量的几个例子:

1.并行设备的硬件寄存器(如:状态寄存器)
2. 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3. 多线程应用中被几个任务共享的变量

总结:
        最后一句话总结它:volatile关键字的主要用途是为了防止编译器优化,告诉编译器,在使用它修饰的变量时,必须每次从内存中重新读值,而不是直接使用上一次从内存中加载到寄存器中的值。

面试心得:
        在面试中回答不出这个问题的人是不会被雇佣的。老师说过这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量,不懂得volatile内容将会带来灾难。

C语言基础 — 关键字volatile有什么含意? 三个不同的例子。相关推荐

  1. C语言面试题小练——第10天:宏定义一年的秒数、变量定义练习、关键字volatile有什么含意

    文章目录 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 2. 用变量a给出下面的定义 3. 关键字volatile有什么含意?并给出三个不同的例子. 1. 用 ...

  2. 每日一题(17)—— 关键字volatile的作用和三个不同的应用场合

    关键字volatile的作用和三个不同的应用场合 作用:防止编译器优化: (1)并行设备的硬件寄存器(如状态寄存器):// #define S5PV210_GPIO_DATA (*(volatile ...

  3. 黑马程序员——Java语言基础——关键字、表示符、常量、变量及数据的类型、运算符

    ---------------------------- android培训.java培训.期待与您交流! --------------------------------- Java是强类型的语言, ...

  4. C语言:关键字volatile详解!

    一.volatile 介绍 参看:volatile详解 参看:C Language Keywords Indicates that a variable can be changed by a bac ...

  5. 第二课--C语言基础(1,2部分--共三部分)

    目录 0,课前问题总结 1,C语言基础 1.1,变量 1.2,指针 1.3,关键字 1.4,语句 1.5,函数的写法 2,C代码在SDK中的使用 2.1,变量与内存地址的查看 2.2,指针简单的使用( ...

  6. 【C语言】关键字volatile之有关__IO、__O、__I的故事

    文章目录 前言 1.有关volatile的故事 2.顺带一提的const 3.__IO.__O.__I的缘起 前言   在阅读意法官方给的STM32固件库的工程中的时候偶然看见了_IO修饰的变量然后发 ...

  7. 关键字volatile有什么含意 并给出三个不同的例子

    一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存 ...

  8. 关键字volatile有什么含意?并给出三个不同的例子

    一个定义为volatile的变量就是说它可能会意想不到的改变(改变它的情况有很多,例如操作系统,硬件,线程),这样,编译器就不会去假设这个值,也就是说,当优化器读到这个值时就会小心翼翼的去重新读取这个 ...

  9. C语言static关键字的作用(有三个作用)

    1.具有隐藏的作用 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性. a.c: char a = 'A'; // global variable void msg() ...

最新文章

  1. 日常笔记——思科认证本地域登录
  2. JVM 年轻代(Eden、From、To)、老年代讲解
  3. python3 socketserver_《Python核心编程(第3版)》——2.5 *SocketServer模块
  4. HDU-2332 机器人的舞蹈 递推
  5. svg标签的CSS3动画特效 - 经典特效2
  6. fifo算法模拟_我是怎样学习算法的?(V1.0)
  7. centos7 LVM调整,划分home部分容量到root
  8. Query siblings()
  9. Apache Sentry 第一弹:Server启动、连接Hue、分组详解
  10. adalm pluto_将Apache Pluto与Lucene搜索引擎示例教程集成
  11. 在WINDOWS 2003上运行Apache服务
  12. 「长乐集训 2017 Day1」区间 线段树
  13. Linux安装配置CI框架
  14. matlab深度DoF图像修复,windows10系统运行dnf提示client.exe损坏的图像解决方法
  15. 小程序优购商城项目总结
  16. Vmware workstation 安装教程
  17. wamp3.1.0 X64下载链接(最新)
  18. 如何刷机:iphone8锁屏密码错误多次,手机停用,连接iTunes,磁盘已满,双重认证弊端!
  19. 一文详解 OpenGL ES 纹理颜色混合
  20. 如何利用边缘计算,实现低延时、高质量的互动课堂体验?

热门文章

  1. kinect能接到电脑上用吗_浅谈:在PC上用摄像头体验体感控制
  2. MySQL如何统计时间差的平均值
  3. 遇见逆水寒服务器修复,遇见逆水寒暂时关服修整,改为乙女游戏,下次再见就是氪金之时?...
  4. 智能语音在呼叫领域应用广泛 但在“+”之后更精彩
  5. 锤子M1L安装google play记
  6. 我划着“飞桨”,晃晃悠悠的荡漾在程序的海洋!
  7. python编写程序输出诗句_RPA交流——使用 python 写出诗一样的代码 (一)
  8. C#理论 —— 窗体应用WinForm
  9. python中绘制折线图s是什么意思_python用pandas和matplotlib画折线图和条形图
  10. PHP count() empty() isset() 的应用