栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言Volatile关键字

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)计算机里只有硬盘能够永久性储存数据。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号