【原创】C语言类型限定符-关键字

技术【原创】C语言类型限定符-关键字 【原创】C语言类型限定符-关键字volatile 限定符告诉计算机,代理(而不是变量所在的程序)可以改变该变量的值。通常,它被用于硬件地址以及在其他程序或同时运行的

c语言类型限定符-关键字。

volatile限定符告诉计算机,可以更改变量值的是代理,而不是变量所在的程序。通常,它用于硬件地址,并在同时运行的其他程序或线程中共享数据。地址用于接受来自另一台计算机的输入信息。

Volatile涉及编译器优化。

编译器注意到代码使用了x两次,但是没有改变它的值。因此,编译器将x的值临时存储在寄存器中,然后在使用时从寄存器中读取x的值。这个过程叫做缓存。没有volatile关键字,编译器不知道这是否会发生。因此,编译器不会缓存。如果代码中没有声明volatile关键字,编译器会假设变量的值在使用过程中没有变化,然后尝试优化代码。

以上是C入门Plus的讲解。

volatile关键字和const一样,是一个类型修饰符,它所修改的变量可以被编译器未知的一些因素改变,比如操作系统、硬件或其他线程。当遇到此关键字声明的变量时,编译器将不再优化访问该变量的代码,从而提供对特殊地址的稳定访问。

先看下面的例子:

int i=10

int j=I;//(1)语句。

int k=I;//(2)语句。

此时,编译器优化了代码,因为我没有在语句(1)和(2)中用作左值。此时编译器认为I的值没有改变,所以在语句(1)中从内存中取出I的值并赋值给J后,这个值并没有被扔掉,而是继续用于在语句(2)中赋值给K。编译器不会生成汇编代码,也不会再次从内存中检索I的值,提高了效率。但注意:(1)、(2)语句之间的I不作为左值。

再看一个例子:

volatile int i=10

int j=I;//(3)语句。

int k=I;//(4)语句。

volatile关键字告诉编译器我随时都可能改变,每次使用I的值都必须从内存中取出,所以编译器生成的汇编代码会从I的地址中重新读取数据,放入k中。

volatile关键字告诉编译器我随时都可能改变,每次使用I的值都必须从内存中取出,所以编译器生成的汇编代码会从I的地址中重新读取数据,放入k中。

这样,如果I是一个寄存器变量或者代表一个端口的数据或者多线程的共享数据,就很容易出错,所以volatile可以保证对特殊地址的稳定访问。

至于为什么容易出错,先记住怎么用,然后填坑。

作者:四月黄妙芝。

来源:https://www.cnblogs.com/hanoch-HMZ/p/15493017.html

本文版权归作者和博主园区所有,仅供学习使用。欢迎转载讨论。但是,未经作者同意,您必须保留此声明,并在文章页面的明显位置给出原文的链接。否则,您保留追究法律责任的权利。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/62061.html

(0)

相关推荐

  • web前端面试中的常见的算法问题有哪些

    技术web前端面试中的常见的算法问题有哪些这篇文章主要介绍“web前端面试中的常见的算法问题有哪些”,在日常操作中,相信很多人在web前端面试中的常见的算法问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操

    攻略 2021年11月15日
  • Hibernate中提示serverTimezone出现问题怎么办

    技术Hibernate中提示serverTimezone出现问题怎么办小编给大家分享一下Hibernate中提示serverTimezone出现问题怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望

    攻略 2021年12月8日
  • 松果电单车,支付宝怎么打开松果出行

    技术松果电单车,支付宝怎么打开松果出行使用支付宝和使用微信打开松果出行的方式是一样的松果电单车,操作方法如下01
    1.松果电单车用车方式有两种,分别是:
    方式一:在微信或支付宝扫描车身二维码,直接用车;
    方式二:在松果电

    生活 2021年10月20日
  • c++ 文本处理

    技术c++ 文本处理 c++ 文本处理c++ 文本处理
    1、使用sstream版本
    (1)功能:截取第一列为1以后的数据,如下图,截取第5行(包括第5行)以后的数据,前面4行数据丢弃。(2)代码:tex

    礼包 2021年12月3日
  • 大戴礼记,满族正百旗人姓戴老姓氏起源

    技术大戴礼记,满族正百旗人姓戴老姓氏起源戴姓的起源说法大戴礼记,其实也是源自于各个时代所有些记载的说明,而其中一个就是说源自于蒙古族,另一个说法就是说是源自于满族的汉化改姓,对戴姓的说法很多种都是很多都是源自于的说法都是

    生活 2021年10月27日
  • Java的访问控制修饰符有哪些各有什么访问权限请对照第7页ppt的表格分别写程序验证。

    技术Java的访问控制修饰符有哪些各有什么访问权限请对照第7页ppt的表格分别写程序验证。 Java的访问控制修饰符有哪些各有什么访问权限请对照第7页ppt的表格分别写程序验证。Java的访问控制修饰符

    礼包 2021年11月30日