C语言基础 — 关键字volatile有什么含意? 三个不同的例子。
关键字volatile有什么含意? 并给出三个不同的例子。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
→下面是volatile变量的几个例子:
1.并行设备的硬件寄存器(如:状态寄存器)
2. 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3. 多线程应用中被几个任务共享的变量
总结:
最后一句话总结它:volatile关键字的主要用途是为了防止编译器优化,告诉编译器,在使用它修饰的变量时,必须每次从内存中重新读值,而不是直接使用上一次从内存中加载到寄存器中的值。
面试心得:
在面试中回答不出这个问题的人是不会被雇佣的。老师说过这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量,不懂得volatile内容将会带来灾难。
C语言基础 — 关键字volatile有什么含意? 三个不同的例子。相关推荐
- C语言面试题小练——第10天:宏定义一年的秒数、变量定义练习、关键字volatile有什么含意
文章目录 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 2. 用变量a给出下面的定义 3. 关键字volatile有什么含意?并给出三个不同的例子. 1. 用 ...
- 每日一题(17)—— 关键字volatile的作用和三个不同的应用场合
关键字volatile的作用和三个不同的应用场合 作用:防止编译器优化: (1)并行设备的硬件寄存器(如状态寄存器):// #define S5PV210_GPIO_DATA (*(volatile ...
- 黑马程序员——Java语言基础——关键字、表示符、常量、变量及数据的类型、运算符
---------------------------- android培训.java培训.期待与您交流! --------------------------------- Java是强类型的语言, ...
- C语言:关键字volatile详解!
一.volatile 介绍 参看:volatile详解 参看:C Language Keywords Indicates that a variable can be changed by a bac ...
- 第二课--C语言基础(1,2部分--共三部分)
目录 0,课前问题总结 1,C语言基础 1.1,变量 1.2,指针 1.3,关键字 1.4,语句 1.5,函数的写法 2,C代码在SDK中的使用 2.1,变量与内存地址的查看 2.2,指针简单的使用( ...
- 【C语言】关键字volatile之有关__IO、__O、__I的故事
文章目录 前言 1.有关volatile的故事 2.顺带一提的const 3.__IO.__O.__I的缘起 前言 在阅读意法官方给的STM32固件库的工程中的时候偶然看见了_IO修饰的变量然后发 ...
- 关键字volatile有什么含意 并给出三个不同的例子
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存 ...
- 关键字volatile有什么含意?并给出三个不同的例子
一个定义为volatile的变量就是说它可能会意想不到的改变(改变它的情况有很多,例如操作系统,硬件,线程),这样,编译器就不会去假设这个值,也就是说,当优化器读到这个值时就会小心翼翼的去重新读取这个 ...
- C语言static关键字的作用(有三个作用)
1.具有隐藏的作用 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性. a.c: char a = 'A'; // global variable void msg() ...
最新文章
- 日常笔记——思科认证本地域登录
- JVM 年轻代(Eden、From、To)、老年代讲解
- python3 socketserver_《Python核心编程(第3版)》——2.5 *SocketServer模块
- HDU-2332 机器人的舞蹈 递推
- svg标签的CSS3动画特效 - 经典特效2
- fifo算法模拟_我是怎样学习算法的?(V1.0)
- centos7 LVM调整,划分home部分容量到root
- Query siblings()
- Apache Sentry 第一弹:Server启动、连接Hue、分组详解
- adalm pluto_将Apache Pluto与Lucene搜索引擎示例教程集成
- 在WINDOWS 2003上运行Apache服务
- 「长乐集训 2017 Day1」区间 线段树
- Linux安装配置CI框架
- matlab深度DoF图像修复,windows10系统运行dnf提示client.exe损坏的图像解决方法
- 小程序优购商城项目总结
- Vmware workstation 安装教程
- wamp3.1.0 X64下载链接(最新)
- 如何刷机:iphone8锁屏密码错误多次,手机停用,连接iTunes,磁盘已满,双重认证弊端!
- 一文详解 OpenGL ES 纹理颜色混合
- 如何利用边缘计算,实现低延时、高质量的互动课堂体验?
热门文章
- kinect能接到电脑上用吗_浅谈:在PC上用摄像头体验体感控制
- MySQL如何统计时间差的平均值
- 遇见逆水寒服务器修复,遇见逆水寒暂时关服修整,改为乙女游戏,下次再见就是氪金之时?...
- 智能语音在呼叫领域应用广泛 但在“+”之后更精彩
- 锤子M1L安装google play记
- 我划着“飞桨”,晃晃悠悠的荡漾在程序的海洋!
- python编写程序输出诗句_RPA交流——使用 python 写出诗一样的代码 (一)
- C#理论 —— 窗体应用WinForm
- python中绘制折线图s是什么意思_python用pandas和matplotlib画折线图和条形图
- PHP count() empty() isset() 的应用