[CareerCup] 13.5 Volatile Keyword 关键字volatile

简介:

13.5 What is the significance of the keyword "volatile" in C

 

这道题考察我们对于关键字volatile的理解,顾名思义,volatile有易变的易挥发的意思,在C/C++里,表示告知编译器某个变量可能会由程序外部改变,比如操作系统,硬件或者其他的线程。由于变量会由无法预期的改变,所有编译器每次都需要从内存中读取变量值。我们可以如下定义一个整型变量为volatile:

int volatile x;
volatile int x;

当然我们也可以定义一个指针变量:

volatile int *x;
int volatile *x;

volatile 的变量不会被优化,这很有用,看下面的代码:

int opt = 1;
void Fn(void) {
    start:
        if (opt == 1) goto start;
        else break;
}

乍看上去,上面的程序是死循环的,编译器会自动进行如下优化:

void Fn(void) {
    start:
        int opt = 1;
        if (true) goto start;
        else break;
}

这样的确是个死循环,但是外部的操作想要给局部变量opt赋值0,这样可以跳出循环。

为了防止编译器进行上述的优化,我们想要从外部改变参数值,从而控制循环。我们通过加volatile关键字来做:

volatile int opt = 1;
void Fn(void) {
    start:
        if (opt == 1) goto start;
        else break;
}

本文转自博客园Grandyang的博客,原文链接:关键字volatile[CareerCup] 13.5 Volatile Keyword ,如需转载请自行联系原博主。

相关文章
|
6月前
|
缓存 编译器
volatile关键字
volatile关键字
|
6月前
|
缓存 编译器 C语言
一起来探讨volatile关键字
在C语言中,volatile是一个关键字,用于告诉编译器不要对被声明为volatile的变量做优化,以确保每次对该变量的读写都直接操作内存。
|
缓存 安全 Java
【volatile关键字】
【volatile关键字】
|
存储 缓存 Java
volatile 关键字说明
volatile 关键字说明
51 0
|
3月前
|
存储 Java 编译器
|
3月前
|
缓存 Java 编译器
关键字: volatile详解
综上所述,`volatile`关键字是Java中实现轻量级同步的一个重要手段,主要用于确保变量的跨线程可见性,但并不保证操作的原子性。在多线程编程的过程中,合理地选择和使用 `volatile`关键字,对于提高程序的正确性和性能都至关重要。
39 0
|
SQL 缓存 Java
Volatile关键字介绍
Volatile关键字介绍
Volatile关键字介绍
|
存储 缓存 Java
volatile关键字再理解
volatile关键字再理解
volatile关键字再理解
|
缓存 前端开发 Java
volatile关键字有什么用?
volatile关键字有什么用?
volatile关键字有什么用?
|
缓存 安全 算法
你应该知道的 volatile 关键字(上)
不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。 首先来看看为什么会出现这个关键字。