关键字volatile在c语言下的理解

简介:

volatile关键字:防止被编译器优化;下面是在linux环境下的解释:

*注释:解释下linux下的优化:

linux下,gcc 是指gcc c编译器。编译选项-O1告诉编译器使用第一级优化。增加优化会使程序执行的更快,但是也会有一定的缺点,它会造成机器代码很大程度的变化,从而使机器码和原代码很难对应起来。从程序方面考虑我们会经常使用第二级优化-O2。这个问题以后介绍。

下来我们看下面代码没有加关键字volatile

wKioL1Yjx1-QgKnsAAAQPKqEOUM252.gif

通过下面不加优化命令得到结果;

wKiom1Yjx_Djw8sNAAASLdO2oEo326.gif

可以看到结果被改变。

通过下面加优化的命令得到结果:

wKiom1YjyHnDifa2AAASJHWRdbM404.gif

可以看见没有改变。

因为经过优化后的变量会放在寄存器中。前面已经说过寄存器是速度最快的。

下面是加volatile的代码:

wKioL1YjyX2BvUigAAAQhvphqjE120.gif

wKiom1YjyYOzEDAWAAANHnuvNcQ070.gif

可以看到,虽然经过-O2优化,但是加volatile后10还是被改成20;

结论:

volatile关键字是防止编译器对其变量进行优化。



本文转自 8yi少女的夢 51CTO博客,原文链接:http://blog.51cto.com/zhaoxiaohu/1704079,如需转载请自行联系原作者

相关文章
|
1天前
|
缓存 安全 编译器
【C语言】volatile 关键字详解
`volatile` 关键字在 C 语言中用于防止编译器对某些变量进行优化,确保每次访问该变量时都直接从内存中读取最新的值。它主要用于处理硬件寄存器和多线程中的共享变量。然而,`volatile` 不保证操作的原子性和顺序,因此在多线程环境中,仍然需要适当的同步机制来确保线程安全。
14 2
|
5月前
|
C语言
|
5月前
|
存储 C语言
C语言中static关键字的作用与用法解析
C语言中static关键字的作用与用法解析
|
6月前
|
存储 C语言
C语言中的typedef关键字:为类型定义新名称
C语言中的typedef关键字:为类型定义新名称
|
6月前
|
C语言
深入探索C语言中的sizeof关键字
深入探索C语言中的sizeof关键字
|
6月前
|
存储 编译器 C语言
C语言中的关键字与标识符详解
C语言中的关键字与标识符详解
130 0
|
7月前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
7月前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
56 2
|
7月前
|
存储 C语言
【C语言】数据:数据类型关键字
【C语言】数据:数据类型关键字
|
7月前
|
存储 编译器 C语言
c语言中static关键字的作用
c语言中static关键字的作用