volatile关键字是一种类型修饰符,用它声明的变量类型可以被某些编译器未知的因素更改,比如:操作系统、硬件或其他线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对该特殊地址的稳定访问。声明volatile语法如下:int volatile vInt;,当要求使用volatile声明的变量的值时,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。例如:

volatile int i=10;
int a = i;
...
// 其他代码,并未明确告诉编译器,对 i 进行过操作
int b = i;

volatile关键字指出i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在b中。而优化做法是,由于编译器发现两次从i读取数据的代码之间没有对i进行过操作,它会自动把上次读的数据放在b中,而不是重新从i里面读。

待补充:
https://www.runoob.com/w3cnote/c-volatile-keyword.html

C语言volatile关键字相关推荐

  1. C语言volatile关键字详解

    volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储 ...

  2. C语言-volatile关键字

    目录: 一.简述volatile 二.volatile 的含义 三.编译器优化 → C关键字volatile → memory破坏描述符 1.编译器优化介绍 2.C语言关键字volatile 3.Me ...

  3. C语言volatile 关键字

    什么是volatile关键字 volatile用于声明一个变量,告诉编译器该变量值容易发生改变,在编译.读取.存储该变量的时候都不要做任何优化,因此编译后的程序每次需要存储或读取这个变量的时候,都会直 ...

  4. c语言volatile关键字(详细)总结附示例讲解

    目录 一.简介 二.示例代码解析 2.1 修饰变量 2.2 修饰硬件寄存器地址 三.其他相关链接 一.简介 volatile属于C语言的关键字.开发者告诉编译器该变量是易变的,无非就是希望编译器去注意 ...

  5. C语言volatile关键字的作用

    一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件告诉缓存Cache,加速对内存的访问.另外在现代CPU中指令的执行并不一定严格按照顺序执行,没 ...

  6. c语言volatile关键字的作用是什么?

    一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问.另外在现代CPU中指令的执行并不一定严格按照顺序执行,没 ...

  7. C语言volatile关键字—最易变的关键字

    volatile 是易变的.不稳定的意思.很多人根本就没见过这个关键字,不知道它的存在.也有很多程序员知道它的存在,但从来没用过它.我对它有种"杨家有女初长成,养在深闺人未识" 的 ...

  8. C语言学习及应用笔记之四:C语言volatile关键字及其使用

    在C语言中,还有一个并不经常使用但却非常有用的关键字volatile.那么使用volatile关键字究竟能干什么呢?接下来我将就此问题进行讨论. 一个使用volatile关键字定义变量,其实就是告诉编 ...

  9. c 语言 volatile 关键字

    一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问.另外在现代CPU中指令的执行并不一定严格按照顺序执行,没 ...

  10. c语言输出王字图形,专一的王子,C语言volatile关键字解析

    你明天 有一个朋友要过生日,今天把要送的礼物打包好了,一般情况下,我们明天起来不需要再次打开验证一下里面的礼物是否存在,因为我们知道,只要礼物的外包装没有动过,里面的东西应该也没有动过.其实编译器和人 ...

最新文章

  1. 【前端】20款国外非常漂亮的优秀网站404错误页面HTML模板
  2. 请求getServiceTime出错
  3. 阿里公开Weex技术架构,还开源了一大波组件
  4. 爬了菊姐的两万条评论,竟发现菊粉都是这样的人!
  5. __name__=__main__
  6. java服务器内存问题_java内存泄漏5种情况总结
  7. 二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)
  8. linux系统安装serv u,建立第一个可用的FTP服务器
  9. -bash: mysql: command not found解决方法(zabbix监控mysql失败)
  10. windows10强制删除文件_如何恢复按下Shift + DELETE键永久删除的文件和资料夹?
  11. 在java中什么管理内存_Java是如何管理内存
  12. arm linux vlc移值,vlc-3.0.8在飞凌开发板i.mx6q上移植
  13. sprintf函数用法注意事项
  14. FCM聚类算法(模糊C均值算法)
  15. 5e服务器优化参数,终极优化篇(7700KOC4.8G+1070默认+16GDDR43000)5E练枪图1080P700FPS...
  16. 马三步内可以到达的点
  17. 独家|一文读懂优化算法
  18. ArcBlock创始人冒志鸿解密区块链3.0
  19. 2022张宇考研基础30讲 第十三讲 常微分方程
  20. mysql中dateformat用法,MySQL date_format()函数

热门文章

  1. ArcGISEngine二次开发(1):系统基本功能
  2. 9个实用PHP函数和功能
  3. php 同时登录怎么办,php 实现同一个账号同时只能一个人登录
  4. 实习成长之路:MySQL二 : 一条SQL更新语句是如何执行的?
  5. java并发编程实战读书笔记3
  6. Flutter之RenderObjectWidget
  7. 万年历插件软件测试,一个计算万年历的简单程序
  8. Log4j2 Zero Day 漏洞 Apache Flink 应对指南(二)
  9. Flink Hudi 0.10.0 发布,多项重要更新,稳定性大幅提升
  10. Tomcat无法启动:Server Tomcat v8.5 Server at localhost failed to start