c语言中voliate关键字(C语言学习笔记—volatile关键字)
一段代码想要最终被计算机执行 ,首先需要被翻译成机器可识别和执行的指令 ,代码编译的过程往往包含几个步骤:
代码 -> 词法语法分析 -> 语义分析 -> 中间代码生成 -> 目标代码生成
在中间代码生成这个阶段,编译器会尝试对中间代码进行优化 ,通过减少无效或冗余的代码 、计算强度优化等手段 ,以助于减少最终生成的指令数 ,或使用更高效的指令 。也可认为由于内存访问速度远不及CPU处理速度 ,为提高机器整体性能 ,
(1)在硬件上: 引入硬件高速缓存Cache ,加速对内存的访问 。另外在现代CPU中指令的执行并不一定严格按照顺序执行 ,没有相关性的指令可以乱序执行 ,以充分利用CPU的指令流水线 ,提高执行速度 。
(2)软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化 。
二 、volitile的作用
用来修饰定义变量的,告诉编译器不要对定义的变量进行编译优化,如果你的程序开启了编译优化后运行不正常了,那首先就要排查下,是否正确的使用了这个关键字 。
三、编译器优化加不加volitile的区别
(1) 设置编译器优化 汇编执行时,不会从内存中读取变量的最新值,只会一直使用第一次读取到的值 。
(2) 不设置编译器优化 汇编执行时,每次都会实时的从内存中读取变量的最新值,保证变量的值是最新的 。
四 、volatile的使用场景
1 、中断服务函数中修改的供其它程序检测的变量需要加volatile;
2 、多任务环境下各任务间共享的标志应该加volatile;
3 、存储器映射的硬件寄存器通常也要加volatile说明 ,因为每次对它的读写都可能有不同意义;
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!