C语言中volatile关键字的使用
来源:互联网 发布:linux 用户清单 编辑:程序博客网 时间:2024/06/05 15:08
问题来源:程序中
#define PORTIO_8*(volatile unsigned char *)
#define PORTA PORTIO_8(IO_BASE + 0x00) /* port A */
volatile的含义
该关键字的含义是提醒编译器它后面的变量随时都有可能改变,因此编译后的程序每次需要存储和读取这个变量的时候,都会直接从变量的地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。
volatile的本意是“易变的”,由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。
一般来说,volatile用在如下的几个地方:
1、终端服务程序中修改的供其他程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半内打断了重写)。
在1中可以通过关断中断来实现;
在2中可以禁止人物调度;
在3中则只能依靠硬件的良好设计了;
volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以消除死代码。但有时这些优化不是程序所需要的,这时可以用volatile关键字禁止做这些优化。
转载自:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/24/1764231.html
- C语言中volatile关键字的使用
- c语言中volatile关键字的作用
- c语言中volatile关键字的作用
- C语言中关键字volatile的含义
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- c语言中volatile关键字的作用
- C语言中volatile关键字的作用
- C语言中volatile关键字的作用
- iOS动画(Core Animation)总结
- (27)回顾一下
- 【Java学习3.7.2】赋值运算符
- HDOJ2041
- linux crontab 实现每秒钟执行
- C语言中volatile关键字的使用
- MySQL字符串截取
- mybatis#{}与${}区别总结
- zookeeper安装和使用 windows环境
- 学习笔记17.10.10
- JS Datatables超出自动添加滚动条
- 微博服务器又炸了,快来看看如何一步步构建高并发的网站
- Spring Boot 配置文件
- tensorflow:tf.reduce_mean()和tf.reduce_sum()