yyds干货盘点#【C/C++面试必备】volatile 关键字 - 51CTO博客
文章推薦指數: 80 %
yyds干货盘点#【C/C++面试必备】volatile 关键字,本文来讲解一下C/C++中的关键字volatile。
在日常的使用中很少使用到,但是,在面试中经常被提起, ...
#yyds干货盘点#【C/C++面试必备】volatile关键字
关注
Linux猿
赞
收藏
评论
分享
微博
QQ
微信
#yyds干货盘点#【C/C++面试必备】volatile关键字
原创
Linux猿
2021-11-1619:47:18
©著作权
文章标签
linux
编译器
#include
寄存器
#yyds干货盘点#
文章分类
C/C++
编程语言
yyds干货盘点
©著作权归作者所有:来自51CTO博客作者Linux猿的原创作品,如需转载,请与作者联系,否则将追究法律责任#yyds干货盘点#【C/C++面试必备】volatile关键字https://blog.51cto.com/u_13685039/4605844
本文来讲解一下C/C++中的关键字volatile。
在日常的使用中很少使用到,但是,在面试中经常被提起,下面具体来看一下。
volatile的作用是什么呢?volatile意思是易变的,是一种类型修饰符,在C/C++中用来阻止编译器因误认某段代码无法被代码本身所改变,而造成的过度优化。
编译器每次读取volatile定义的变量时,都从内存地址处重新取值。
这里就有点疑问了,难道编译器取变量的值不是从内存处取吗?并不全是,编译器有时候会从寄存器处取变量的值,而不是每次都从内存中取。
因为编译器认为变量并没有变化,所以认为寄存器里的值是最新的,另外,通常来说,访问寄存器比访问内存要快很多,编译器通常为了效率,可能会读取寄存器中的变量。
但是,变量在内存中的值可能会被其它元素修改,比如:硬件或其它线程等。
来看一个实际的例子:#include
接下来再看一下编译时添加-O参数优化的情况,执行命令 gcc-Omain.c-omain。
输出结果为:linuxy@linuxy:~/volatile$gcc-Omain.c-omainlinuxy@linuxy:~/volatile$./main初始值:10修改后的值:10linuxy@linuxy:~/volatile$-O参数:使用该参数,编译器会尝试减少代码大小和执行时间,但不执行需要占用大量编译时间的优化。
优化编译需要占用更多的时间,对于大型函数需要占用更大的内存。
来看一下上面例子优化前和优化后代码大小的对比:linuxy@linuxy:~/volatile$gccmain.c-omainlinuxy@linuxy:~/volatile$ls-almain-rwxrwxr-x1linuxylinuxy167527月1814:38mainlinuxy@linuxy:~/volatile$gcc-Omain.c-omainlinuxy@linuxy:~/volatile$ls-almain-rwxrwxr-x1linuxylinuxy167047月1814:38mainlinuxy@linuxy:~/volatile$可以看到,优化后文件变小了。
那再看一下给上面的代码添加上volatile关键字后会怎样?#include
最后,看一下volatile是怎样使用的。
1.修饰普通变量volatile类型变量类型volatile变量volatile放置到类型前后都可以。
例如:#include
大家应该都很熟悉单例模式的实现,而在并发环境下的单例实现方式,我们通常可以采用双重检查加锁(DCL)的方式来实现。
其源码...
重排序
内存屏障
编译器
#yyds干货盘点#
【嵌入式】C语言中volatile关键字
00.目录文章目录00.目录01.volatile概述02.volatile应用场景03.volatile应用示例04.嵌入式系
C
C语言
volatile
volatile关键字
C语言volatile
面试突击51:为什么单例一定要加volatile?
单例模式的实现方法有很多种,如饿汉模式、懒汉模式、静态内部类和枚举等,当面试官问到“为什么单例模式一定要加volatile?时,那么他指的是为什么懒汉模式中的私有变量要加volatile?懒汉模式指的是对象的创建是...
重排序
内存可见性
线程安全
volatile作用
volatile使用场景:线程间共享变量需要使用volatile关键字标记,确保线程能够读取到更新后的最新变量值。
volatile关键字的目的是告诉虚拟机:1.每次访问变量时,总是获取主内存的最新值。
2.每次修改变量后,立刻会...
volatile作用
共享变量
流程图
使用场景
JNI简单示例
JNI即JavaNativeInterface(Java本地接口),是一个协议,主要作用为:实现Java调用c/c++代码(类库
java
头文件
c++
yyds干货盘点#C++static
作者:Linux猿简介:CSDN博客专家?...数据结构和算法、C/C++、面试、刷题、Linux尽管咨询我,关注我,有问题私聊!关注专栏:动图讲解数据结构和算法(优质好文持续更新中……)?欢迎小伙伴们点赞?收藏⭐、留言?
静态数据成员
静态成员函数
静态成员
#yyds干货盘点#
#yyds干货盘点#
数据结构-哈希表
一名在校学生,本片主要讲解一种数据结构:哈希表本节重点内容一、前言二、数组三、哈希表1、百度百科2、问题引用3、哈希函数4、哈希表结构5、举例分析6、哈希冲突7、哈希表的优缺点四、面试题1.1.只出现一次的数字2...
数组
数据结构
数据
#yyds干货盘点#
C++单例模式总结与剖析
C++单例模式总结与剖析单例可能是最常用的简单的一种设计模式,实现方法多样,根据不同的需求有不同的写法;同时单例也有其局限
线程安全
c++
#include
yyds干货盘点#一文搞懂NULL和nullptr的区别【C/C++面试必备】
大家可能对NULL和nullptr都有了解,NULL属于C语言中的宏,后来C++11引入了nullptr关键字,都用来表示空指针。
那问题来了,为什么C++11要引入nullptr呢?那必定是NULL在某些方面存在某些不足,所以...
linux
c++
#define
c++11
#yyds干货盘点#
#yyds干货盘点#
yyds干货盘点#【C/C++面试必备】bfs和dfs的区别
作者:Linux猿简介:CSDN博客专家?C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
结点
数据结构
搜索
深度优先搜索
#yyds干货盘点#
#yyds干货盘点#
Lua
Lua特性轻量级:它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
可扩展:Lua提供了非常易于使用的扩展接口和机制
lua
多线程
c语言
Java基础知识面试题(2022最新版)
Java基础知识面试题(2020最新版)#Java和C++的区别都是面向对象的语言,都支持封装、继承和多态Java不提供指针来直接访问内存,程序内存更加安全Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承...
父类
子类
java
yyds干货盘点#【React工作记录六十三】Http常见错误
前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易...
服务器
数据
常见错误
#yyds干货盘点#
yyds干货盘点#【C/C++面试必备】声明和定义的区别
本文来介绍一下声明和定义的区别,本文中的程序以C/C++为例进行说明。
一、变量的声明和定义1.1 声明声明是用来告诉编译器变量的名称和类型,而不分配内存。
例如:externintvar;声明externintble=10;定义...
编译器
函数定义
函数声明
c++
#yyds干货盘点#
#yyds干货盘点#
yyds干货盘点#关键字:synchronized详解
关键字:synchronized详解Synchronized的使用在应用Sychronized关键字时需要把握如下注意点:一把锁只能同时被一个线程获取,没有获得锁的线程只能等待;每个实例都对应有自己的一把锁(this),不同实例之间互不影响;...
ide
代码块
同步代码块
#yyds干货盘点#
yyds干货盘点#Java并发基础-volatile
在前面的文章中,我们介绍了synchronized关键字的使用和部分原理,下面我们再来看看在并发编程中另一个非常重要的关键字volatile。
为了直观的体会volatile的作用,下面先看一段代码:javapublicclassVolatileTest{...
加锁
并发
多线程
#yyds干货盘点#
yyds干货盘点#解决剑指offer:剪绳子(进阶版)
1.简述:描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>...例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
由于答案过大
最大乘积
取模
数据
Linux猿
关注
私信
近期文章
1.#yyds干货盘点#求约数
2.#yyds干货盘点#动态规划求矩形面积
3.#yyds干货盘点#枚举应用
4.#yyds干货盘点#最优配对算法
5.#yyds干货盘点#最长单调递增子序列应用
热门文章
#yyds干货盘点#KMP算法应用
#yyds干货盘点#枚举应用
#yyds干货盘点#并查集按个数合并应用
#yyds干货盘点#最长单调递增子序列应用
#yyds干货盘点#最优配对算法
七日热门
【C/C++】C/C++博客汇总
【C/C++】C/C++博客汇总
C++c++初识
c/c++
c/c++
C/C++
c/c++
candc++
C/C++
c/c++
相关标签
全部
cvolatile关键字的作用
c++语言中的关键字
c语言中volatile关键字的作用
c语言关键字volatile
javavolatile关键字
javavolatile关键字的作用
java中volatile关键字
java中volatile关键字详解
java关键字+面试
java关键字volatile
签到领勋章
返回顶部
51CTO博客
首页
关注
热榜
订阅专栏
学堂
精培
开源社区
CTO训练营
51CTO
班级博客
登录注册
手机随时阅读
新人专享大礼包¥24
写文章
搜索历史
清空
热门搜索
查看【
】的结果
Copyright©2005-202251CTO.COM
版权所有京ICP证060544号
关于我们
官方博客
意见反馈
了解我们
全部文章
在线客服
网站地图
热门标签
友情链接
开源基础软件社区
51CTO学堂
51CTO
延伸文章資訊
- 1解讀關鍵字volatile C語言面試題分析之一 - 程序員學院
解讀關鍵字volatile C語言面試題分析之一,volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如作業系統硬 ...
- 2volatile关键字有什么作用- C语言面试宝典 - 黑马程序员教程
黑马程序员教程前端面试宝典模块专注提供各类C语言开发面试题及答案,致力收集C语言 ... C/C++ Volatile变量,与非Volatile变量之间的操作,是可能被编译器交换顺序的。
- 3面試C/C++ 觀念整理
這裡有些題目是來自網路上MTK面試的C考古題,另外又加入了一些易搞混的觀念 ... 一個定義為volatile 的變量是說這變量可能會被意想不到地改變(尤其在 ...
- 4yyds干货盘点#【C/C++面试必备】volatile 关键字 - 51CTO博客
yyds干货盘点#【C/C++面试必备】volatile 关键字,本文来讲解一下C/C++中的关键字volatile。在日常的使用中很少使用到,但是,在面试中经常被提起, ...
- 5嵌入式的面試題 - 立你斯學習記錄
在定義常量時,為什麼推薦使用const,而不是#define。 20、C語言的volatile的含義是什麼。使用時會對編譯器 ...