C语言Volatile关键字

一、背景
计算机执行程序时,每条指令是在CPU中执行的,执行指令过程中会对数据进行读取和写入。程序运行中临时数据是存放在主存储器(又称为内存,作用是存放指令和数据,能由CPU直接随机存取)中,由于CPU执行速度很快,从内存读取数据和向内存写入数据的过程与CPU执行指令的速度比要慢很多,所以CPU里有高速缓存。
即程序运行时,会将运算需要的数据从主存储器复制一份到CPU高速缓存当中,CPU进行计算式可以直接从高速缓存读取数据和向其写入数据,运算结束后,再将高速缓存中的数据刷新到主存储器中。
二、应用范围
1.在stm32单片机中,对寄存器IO口操作会使用到volatile,涉及CPU与内存之间、底层方面运用;
2.在应用层面,编写一个多线程代码时,会用到volatile。写代码时,多线程同时操作一个变量,出现bug或达不到要的效果时,要想到对全局变量修饰volatile,使此变量是可变的
三、主要作用
1.使用volatile修饰变量,会禁止编译器(如gcc)对volatile的变量做优化;
2.底层操作中多线程、中断、I/O口等,volatile修饰变量后计算机会不断读取、实时监控内存中此变量的值。若不使用volatile关键字,读取的值是从高速缓存中读取,而不是从内存中读取,会造成问题。
如在I/O口中,高低电平变化,变量值会随时变化,所以要用volatile对变量加以修饰CPU直接访问内存的变化,实时监控变量。若不使用volatile修饰,I/O口高低电平变化时,CPU读取的值保存到寄存器中,再去访问寄存器中的数据,寄存器中的数据没有变化,达不到想要的效果。
注:
(1)运用’gcc’编译器对写好的代码编译

gcc abc.c

(2)高速缓冲存储器(Cache)也就是平常看到的一级缓存(L1 Cache)、二级缓存(L2 Cache)、三级缓存(L3 Cache)这些数据,它位于CPU与内存之间,是一个读写速度比内存更快的存储器
(3)计算机里只有硬盘能够永久性储存数据

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值