【原创】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)

相关推荐

  • 如何使用Swagger调试RESTful风格的接口

    技术如何使用Swagger调试RESTful风格的接口这篇文章将为大家详细讲解有关如何使用Swagger调试RESTful风格的接口,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定

    攻略 2021年11月9日
  • python单元测试怎样开展(pytest如何实现自动化测试)

    技术Pyhon中如何实现单元测试这篇文章将为大家详细讲解有关Pyhon中如何实现单元测试,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。文件calculator.py#计算器类
    clas

    攻略 2021年12月17日
  • flinkstream flinksql 优缺点(flink sql和datastream的区别)

    技术如何正确使用FlinkStreamSQL本篇文章为大家展示了如何正确使用FlinkStreamSQL,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、前期准备项目路径:htt

    攻略 2021年12月23日
  • 数据库文件坏块损坏导致打开时报错怎么办

    技术数据库文件坏块损坏导致打开时报错怎么办小编给大家分享一下数据库文件坏块损坏导致打开时报错怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 故障描述故障主要表现为打开数

    攻略 2021年11月11日
  • 古典密码学——移位密码 Shift Cipher

    技术古典密码学——移位密码 Shift Cipher 古典密码学——移位密码 Shift Cipher移位密码的理论基础是数论中的模运算。模运算的基本定义:假设a和b均为整数,m是一正整数。若m整除a-

    礼包 2021年12月3日
  • Python如何爬取觅知网素材图片

    技术Python如何爬取觅知网素材图片这篇文章主要讲解了“Python如何爬取觅知网素材图片”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何爬取觅知网素材图

    攻略 2021年11月28日