【C语言】volatile关键字-创新互联
- 一、前言
- 二、C语言中变量的访问
- 1. 读变量
- 2. 写变量
- 三、代码优化
- 1. 硬件层面:
- 2. 软件层面:
- 四、volatile的定义
- 五、volatile的应用场合
- 1. 中断
- 2. 多线程
- 3. 硬件寄存器
创新互联专业为企业提供尼泸西网站建设、尼泸西做网站、尼泸西网站设计、尼泸西网站制作等企业网站建设、网页设计与制作、尼泸西企业网站模板建站服务,十余年尼泸西做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
一、前言
volatile 是 C语言 中规定的一个关键字,C语言课程中很少会提及,自己看书也容易忽视的一个 C语言 关键字。
但是,volatile 关键字在嵌入式开发中很常用,并且在笔试面试时会经常会让你解释 volatile 关键字的作用。
二、C语言中变量的访问 1. 读变量
内存 ⟹ \Longrightarrow ⟹ 寄存器(CPU)
2. 写变量寄存器(CPU) ⟹ \Longrightarrow ⟹ 内存
int a, b; //为a,b申请内存。
a = 1; //1 ->寄存器
//寄存器 ->内存(&a)
b = a; //内存(&a)->寄存器
//寄存器 ->内存(&b)
三、代码优化
在计算机工作时,内存的访问速度远不及CPU的处理速度,为了提升计算机的整体性能,在软硬件层面都有相应的机制去优化内存的访问,即减少内存的访问次数。
1. 硬件层面:引入高速缓存(Cache)
2. 软件层面: ① 编码优化(程序员)
② 编译优化(编译器)
四、volatile的定义
volatile 的意思即为“易变的”,在 C语言 中当使用 volatile 修饰一个变量时,即表示这个变量的值随时都有可能发生改变。
因此编译器在编译的时候对该变量的存取操作不能进行优化,即告诉编译器每次存取该变量的时候都要从内存中去存取而不是使用其之前在寄存器中的备份。
volatile int a = 1, b, c; //为a,b,c申请内存并初始化。
b = a; // 内存(&a)->寄存器
// 寄存器 ->内存(&b)
c = a; // 内存(&a)->寄存器 (避免这步被编译器优化省略,则添加volatile进行特征修饰)
// 寄存器 ->内存(&c)
五、volatile的应用场合 1. 中断
中断服务程序中若修改其他程序中使用的变量,需用volatile修饰该变量。
2. 多线程多个线程都要访问的变量一般需要加volatile修饰。
3. 硬件寄存器硬件寄存器的值有可能会随着硬件工作状态的变化而改变,需要加volatile修饰。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章名称:【C语言】volatile关键字-创新互联
分享网址:http://ybzwz.com/article/dshcsi.html