const volatile
2016-03-14 14:38
190 查看
const:只读的变量,必须在定义时进行初始化。
volatile:不作编译器的优化,每次直接去内存中取值。
当一个变量,没有被用作左值,而多次取值的情况下,通常编译器会进行优化。
看个例子:
int num = 10;
int a = num; //(1)
int b = num; //(2)
上面(1)(2)句中num没有被用作左值,这个时候编译器会认为i的值没有发生改变,所以在(1)语句从内存中读取
num的值给a后,这个值没有被丢掉,在(2)语句时继续用这个值给b赋值。
注意条件:没有被用作左值时,才会优化,其他情况不作优化。
另一个例子:
volatile int num = 10;
int a = num; // (3)
int b = num; // (4)
volatile关键字告诉编译器num是随时可能会发生变化的。所以每次使用它的时候必须从内存中读取num的值。
1. const volatile int i=10;这行代码有没有问题?如果没有,那 i 到底是什么 属性?
回答一:没有问题,例如只读的状态寄存器。
它是volatile,因为它可能被意想不到地改变;它是const,因为程序不应该试图去修改它。
volatile和const并不矛盾,只是控制的范围不一样,一个在程序本身之外,另一个是程序本身。
回答二:没问题,const和volatile这两个类型限定符不矛盾。
const表示(运行时)常量语义:
被const修饰的对象在所在的作用域无法进行修改操作,编译器对于试图直接修改const对象的表达式会产生编译错误。
volatile表示“易变的”,即在运行期对象可能在当前程序上下文的控制流以外被修改(例如多线程中被其它线程修改;
对象所在的存储器可能被多个硬件设备随机修改等情况):
被volatile修饰的对象,编译器不会对这个对象的操作进行优化。
一个对象可以同时被const和volatile修饰,表明这个对象体现常量语义,但同时可能被当前对象所在程序上下文意外的情况修改。
只要记住两个修饰符的针对范围不一样,一个是在程序内部,一个是程序外部(操作系统,硬件或其他线程等)
volatile:不作编译器的优化,每次直接去内存中取值。
当一个变量,没有被用作左值,而多次取值的情况下,通常编译器会进行优化。
看个例子:
int num = 10;
int a = num; //(1)
int b = num; //(2)
上面(1)(2)句中num没有被用作左值,这个时候编译器会认为i的值没有发生改变,所以在(1)语句从内存中读取
num的值给a后,这个值没有被丢掉,在(2)语句时继续用这个值给b赋值。
注意条件:没有被用作左值时,才会优化,其他情况不作优化。
另一个例子:
volatile int num = 10;
int a = num; // (3)
int b = num; // (4)
volatile关键字告诉编译器num是随时可能会发生变化的。所以每次使用它的时候必须从内存中读取num的值。
1. const volatile int i=10;这行代码有没有问题?如果没有,那 i 到底是什么 属性?
回答一:没有问题,例如只读的状态寄存器。
它是volatile,因为它可能被意想不到地改变;它是const,因为程序不应该试图去修改它。
volatile和const并不矛盾,只是控制的范围不一样,一个在程序本身之外,另一个是程序本身。
回答二:没问题,const和volatile这两个类型限定符不矛盾。
const表示(运行时)常量语义:
被const修饰的对象在所在的作用域无法进行修改操作,编译器对于试图直接修改const对象的表达式会产生编译错误。
volatile表示“易变的”,即在运行期对象可能在当前程序上下文的控制流以外被修改(例如多线程中被其它线程修改;
对象所在的存储器可能被多个硬件设备随机修改等情况):
被volatile修饰的对象,编译器不会对这个对象的操作进行优化。
一个对象可以同时被const和volatile修饰,表明这个对象体现常量语义,但同时可能被当前对象所在程序上下文意外的情况修改。
只要记住两个修饰符的针对范围不一样,一个是在程序内部,一个是程序外部(操作系统,硬件或其他线程等)
相关文章推荐
- C中的volatile使用方法
- 探讨C语言中关键字volatile的含义
- 学习Java多线程之volatile域
- C语言中auto,register,static,const,volatile的区别详细解析
- C语言中const,volatile,restrict的用法总结
- C语言 volatile与const同时使用应注意的问题
- 深入解析Java中volatile关键字的作用
- 解析java中volatile关键字
- 深度解析Java中volatile的内存语义实现以及运用场景
- 详解Java线程编程中的volatile关键字的作用
- 深入探讨Java多线程中的volatile变量
- 深入讲解C语言编程中volatile修饰符的作用
- Java理论与实践:正确使用volatile 变量
- 一个由JIT优化引发的问题
- Const Volatile 关键词解析
- const与volatile的使用方法
- volatile的作用
- volatile, 用更低的代价替代同步
- Java并发编程:volatile关键字解析
- 聊聊并发(一)——深入分析Volatile的实现原理