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