`
jelly_bitores
  • 浏览: 46337 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C语言关键字 - 专一王子:Volatile

 
阅读更多
专一王子:volatile
描述:每个变量和他的名字一样很善变,有时候它善变是发自内心的,有时是外部因素决定的,只有volatile变量才会表里如一,因此获得了专一王子的美誉。
作用:volatile字面意思是易挥发,易变化的意思,它修辞的变量表示该变量的值很容易由于外部因素发生改变,强烈请求编译器要老老实实的在每次对变量进行访问时去内存里读取。可能上面说的还不是很清楚,我们换个例子来说,你明天一个朋友过生日,今天把要送的礼物打包好了,一般情况下,我们明天起来不再需要再打开验证一下里面礼物是否存在,因为我们知道,只要礼物的外包装没有动过,里面东西应该不会被动。其实编译器和人一样聪明,为了提高效率也会玩省事,如下面的例子:
1  int a = 10;
2  int b = a;
3  int c = a;
www.2cto.com
编译器扫描了代码发现上面,第一行代码在将10赋给了整形变量a,之后a变量的值没有再发生改变。在后面第二行中,将a变量里的值取出来赋给b变量。在第三行代码里将a变量的值赋给c的时候,因为CPU访问内存速度较慢(看register关键字介绍),编译器为了提高效率,玩了“省事”,直接将10赋给了c。
单从上述代码我们来看是没有问题的,就如同从外包装看生日礼物完好一样。但是,上述代码如果运行在多线程中,在一个线程上下文中没有改变它的值,但是我们不能保证变量的值没有被其它线程改变。就好比是,生日礼物放到其它人那里保存,我们不敢100%保证它里面的东西还完好。当然这种数据不一致的机制不仅仅出现在多线程中,同样在设备的状态寄存器里也会存在。比如:网卡里的某状态寄存器里的值是否为1表示是否有网络数据到达,在当前时刻其值为1,不能代表着下一时刻其值还为1,它的值是由外界条件决定的,编译器肯定不能在这种情况下玩“省事”
为了防止在类似的情况下,编译器玩省事,可以将这些变量声明为volatile,这样,不管它的值有没有变化,每次对其值进行访问时,都会从内存里,寄存器里读取,从而保证数据的一致,做到表里如一。

作者 mr_raptor的专栏
分享到:
评论

相关推荐

    C语言关键字 C语言关键字 C语言关键字

    在本篇文章中,我们将深入探讨C语言中的关键字及其用法。C语言作为一种广泛使用的编程语言,在软件开发领域占据着极其重要的地位。理解并熟练掌握C语言的关键字是学习该语言的基础,也是成为一名合格程序员的...

    C语言关键字9.pdf

    根据提供的文件信息,可以推断出这是一份关于C语言关键字的材料。C语言关键字是组成C语言语法的保留字,它们有着特殊的含义和用法,不能用作变量名、函数名等标识符。这份材料列出了C语言的基本关键字,并且根据标签...

    C关键字-优先级-ASCLL码(全集)

    ### C语言关键字详解 #### 一、概述 在C语言编程中,理解并熟练掌握关键字是基础也是核心技能之一。本文旨在深入解析C语言中的关键字、优先级以及ASCII码的相关概念,帮助读者更加全面地了解这些基础知识。 #### ...

    c语言关键字汇总

    ### C语言关键字详解 #### 1. auto:声明自动变量 - `auto` 关键字用来声明自动变量,这类变量通常存储在栈中,并且在它们的作用域之外是不可见的。 - 示例: ```c auto int i = 10; ``` #### 2. short:声明短...

    统计C语言关键字频度

    它的语法简洁而强大,包含了一系列的关键字,这些关键字是C语言的核心组成部分,用于定义程序的结构和控制流程。本项目聚焦于“统计C语言关键字频度”,旨在帮助开发者理解和分析C语言源代码中的关键字使用情况。 ...

    AEC-Q100-005D1:2012 非易失性存储器写入/擦除耐久性、数据保留和操作寿命测试 - 完整英文电子版(14页)

    完整英文电子版 AEC-Q100-005D1:2012 Non-Volatile Memory Program/Erase Endurance, Data Retention, and Operational Life Test (非易失性存储器程序-擦除耐久性、数据保留和操作寿命测试 )。本测试旨在评估...

    C语言中关键字const、static、volatile、extern、auto、register的用法分析.doc

    C语言中关键字const、static、volatile、extern、auto、register的用法分析 本文将对C语言中的六个关键字:const、static、volatile、extern、auto、register进行详细的分析和解释。 一、const关键字 Const关键字...

    C语言关键字C语言关键字.doc

    C 语言关键字解读 C 语言关键字是 C 语言的基本组成部分,它们是构成 C 语言程序的基础单元。在 C 语言中,关键字是预定义的符号,具有特殊的含义和用途。今天,我们将对 C 语言关键字进行深入解读,了解它们的分类...

    C语言32个关键字含义特别说明

    C语言中包含了32个关键字,这些关键字分为几个主要的类别,包括数据类型关键字、复杂类型关键字、存储级别关键字、流程控制关键字和跳转结构关键字。以下是对这些关键字含义的详细说明。 ### 数据类型关键字 这些...

    C语言中的volatile关键字:深入解析与应用实践

    ### C语言中的volatile关键字:深入解析与应用实践 C语言作为一种通用且强大的编程语言,在软件开发领域占据着举足轻重的地位。它以其简洁高效、接近硬件、良好的可移植性等特点,成为系统软件开发的首选语言之一。...

    标识符----关键字---数据类型.rar

    Java的关键字包括`abstract`、`assert`、`boolean`、`break`、`byte`等,一直到`volatile`、`while`。关键字用于控制流程、声明变量、定义类和接口等。例如,`int`是一个关键字,用于声明整型变量;`for`用于循环...

    AEC-Q100-005D1:2012 Non-Volatile Memory Program-Erase Endurance,

    AEC-Q100-005D1:2012 Non-Volatile Memory Program-Erase Endurance, Data Retention, and Operational Life Test - 完整英文电子版(14页).zip

    Java 多线程与并发(5-26)-关键字- volatile详解.pdf

    Java中的`volatile`关键字是多线程编程中一个重要的概念,它主要解决了两个核心问题:可见性和有序性。在Java内存模型(JMM)中,`volatile`关键字确保了线程之间的通信更加有效和安全。 **一、防止指令重排序** ...

    ASCII码表C语言转义字符C语言运算符及其优先表C语言关键字C语言数据类型大全.pdf

    本文将详细说明C语言的基础知识,包括ASCII码表、C语言转义字符、C语言运算符、C语言关键字和C语言数据类型等。 ASCII 码表 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)...

    C语言32以及C++63个关键字及其含义.doc

    C语言和C++都是强大的编程语言,它们的关键字是编程语法的基础组成部分,这些关键字具有特定的含义和用途。下面是对C语言32个关键字和C++63个关键字的详细解释: 1. C语言关键字: - `auto`:声明一个自动变量,...

    Java并发编程:volatile关键字解析

    ### Java并发编程:volatile关键字解析 #### 一、内存模型的相关概念 在深入了解`volatile`关键字之前,我们首先需要理解计算机内存模型的一些基本概念。在现代计算机系统中,CPU为了提高执行效率,会将频繁访问的...

    C51中的关键字-51单片机

    #### 一、标准C语言关键字 C51是基于标准C语言的一种扩展,它兼容标准C的关键字,并在此基础上增加了针对单片机编程的支持。下面是一些基本的关键字: 1. **auto** - **含义**:用于声明变量,其值在每次函数调用...

    c语言关键字及常用符号.pdf

    C语言关键字及常用符号 C语言关键字是指C语言中具有特殊含义的单词,共有32个关键字。这些关键字不能用作变量名或函数名。下面是C语言的32个关键字: 1. auto:声明自动变量 2. short:声明短整型变量或函数 3. ...

Global site tag (gtag.js) - Google Analytics