volatile的作用和举例
来源:互联网 发布:2017年网络最流行的话 编辑:程序博客网 时间:2024/04/28 20:47
1、作用:作为指令关键字,确保本条指令不会因为编译器的优化而省略,要求每次直接读值。
举例:
int a = 10;
a = 5;
a = 3;
如果不加volatile,编译器会认为a = 3,所以上面两条指令不会产生机器代码。
2、习题:
1). 一个参数既可以是const还可以是volatile吗?解释为什么。
2). 一个指针可以是volatile 吗?解释为什么。
3). 下面的函数被用来计算某个整数的平方,它能实现预期设计目标吗?如果不能,试回答存在什么问题:
1
2
3
4
int
square(
volatile
int
*ptr)
{
return
((*ptr) * (*ptr));
}
解:
1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
2). 是的。尽管这并不很常见。一个例子是当一个中断服务子程序修改一个指向一个buffer的指针时。
3). 这段代码是个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:
1
2
3
4
5
6
7
int
square(
volatile
int
*ptr)
{
int
a,b;
a = *ptr;
b = *ptr;
return
a*b;
}
由于*ptr的值可能在两次取值语句之间发生改变,因此a和b可能是不同的。结果,这段代码可能返回的不是你所期望的平方值!正确的代码如下:
1
2
3
4
5
6
long
square(
volatile
int
*ptr)
{
int
a;
a = *ptr;
return
a*a;
}
0 0
- volatile的作用和举例
- 举例解析Java中Volatile的作用
- C++的构造函数作用和举例
- mysql中外键的作用和举例
- [转]volatile 的作用和用处
- static、const和volatile的作用
- volatile的作用和菱形继承问题
- java volatile 关键字的含义和作用
- volatile关键字的含义和作用
- volatile的作用
- volatile的作用
- volatile的作用
- volatile的作用
- volatile的作用
- volatile的作用
- volatile关键字的作用
- volatile的作用
- volatile的作用
- Guava——Joiner连接字符串Splitter分割字符串
- Jquery DataTable基于Twitter Bootstrap的样式配置和demo下载
- C++设计模式之中介者模式
- 剑指offer之跳台阶&变态跳台阶
- powershell 下汉字转拼音
- volatile的作用和举例
- J2SE多线程 part2 多线程的执行顺序
- No Android facet found in the module 的解决办法
- 【Android开发】解决eclipse Blocked : the user operation is waiting
- virtualbox ubuntu14.04 bridged adapter not working
- TreeSet的泛型排列的基本使用
- python 设置方法超时
- Windows API一日一练(72)GetUserName函数
- Android WebView常见问题及解决方案汇总