面试点:解读关键字volatile(C语言面试题分析之一)

文章推薦指數: 80 %
投票人數:10人

volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。

遇到这个关键字声明的变量,编译器对访问 ... 开发者社区> littletigerbj> 正文 面试点:解读关键字volatile(C语言面试题分析之一) 2011-05-23 961 简介: 面试点:解读关键字volatile C语言面试题分析之一 一.volatile是什么? volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。

+关注继续查看 面试点:解读关键字volatile C语言面试题分析之一 一.volatile是什么? volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。

遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

二.编译器优化是什么意思? inti=5; inta=i; …… intb=i; 编译器发现两次从i读数据的代码之间,并没有对i进行过操作,它会自动把上次读的数据放在b中,而不是重新从i里面读; 三.哪些情况,改变了内存中变量的值,编译器不知道? 1.多线程应用中被几个任务共享的变量; 2.一个中断服务子程序中会访问到的非自动变量; 3.并行设备的硬件寄存器(如:状态寄存器); 四.何时需要使用volatile这个关键字? 嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用会经常要求定义为volatile类型的变量。

五.使用volatile带来什么好处? volatileintnCount; 当要求使用volatile声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。

而且读取的数据立刻被保存。

六.3个经典的volatile问题 1).一个参数既可以是const还可以是volatile吗?解释为什么。

2).一个指针可以是volatile吗?解释为什么。

3).下面的函数有什么错误:intsquare(volatileint*ptr){return*ptr**ptr;}下面是答案:1).可以是。

例如对于只读的状态寄存器而言,如果它仅仅是volatile类型,那么它还是可能被意想不到的改变。

但它还是const的时候,程序就不应该试图去修改它2).可以是的。

尽管这种情况并不常见,但它还是可以。

一个例子就是: 当一个中断服务子程序企图去修改一个指向一个buffer指针的时候。

3).这段代码可能有点恶作剧的味道。

但它很好说明volatile类型参数的含义和作用。

这段代码的目的是用来返指针*ptr所指向的值的平方, 但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:intsquare(volatileint*ptr){inta,b;a=*ptr;b=*ptr;returna*b;}由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。

结果,这段代码可能返不是你所期望的平方值!正确的代码如下:longsquare(volatileint*ptr){inta;a=*ptr;returna*a;} 七.总结 1.使用volatile关键字修饰的变量,可以避免编译器优化; 2.使用volatile关键字修饰的变量,每次都是重新读取内存中的值,而不是使用保存在寄存器里的值了; 3.编译器优化的做法是: inti=5; inta=i; …… intb=i; 编译器发现两次从i读数据的代码之间,并没有对i进行过操作,它会自动把上次读的数据放在b中,而不是重新从i里面读。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。

具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。

如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

程序员 C语言 编译器 BI 人工智能 c语言关键字volatile c语言关键字volatile作用 单例模式volatile关键字 c语言关键字vol 关键字volatile分析 开发者社区> 开发与运维 > 文章 作者高分内容 更多 2018跟着小虎玩着去软考--《小虎新视角历年信息系统项目管理师试题讲解(2014-2017)》书中小诗 1221 湖北松滋历史上七大王氏望族 2930 截止2017年5月19日小虎软考粉丝有798人 1132 软考高级证书可以积分50分 1273 2018跟着小虎玩着去软考--信息系统项目管理师小虎视频讲解----考友评论 1402 相关文章 游客n4jcsdeetmtbg volatile关键字详解(上) 本文主要是讲解volatile关键字的使用,首概括它的三大特征,然后引入JMM模型,结尾我们解释了单例模式(懒汉模式)中为什么要用volatile。

22 0 shy丶gril C/C++中的static关键字的总结 1297 0 杰克.陈 C#defualt关键字默认值用法 原文:C#defualt关键字默认值用法 默认值表达式生成类型的默认值。

 默认值表达式在泛型类和泛型方法中非常有用。

 使用泛型类和泛型方法时出现的一个问题是,如何在无法提前知道以下内容的情况下将默认值赋值给参数化类型 T: T 是引用类型还是值类型。

804 0 异步社区 《C语言编程初学者指南》一1.4 理解关键字 本节书摘来自华章出版社《C语言编程初学者指南》一书中的第1章,第1.4节,作者【美】KeithDavenport(达文波特),M1ichaelVine(维恩),更多章节内容可以访问云栖社区“异步社区”公众号查看 1.4 理解关键字 在标准ANSIC编程语言中,有32个单词定义为关键字(keyword)。

1294 0 eddie小英俊 C语言文件操作解析(二) 940 0 范大脚脚 【译】使用C#yield关键字来提高性能和可读性 1073 0 eddie小英俊 C语言文件操作解析(一) 689 0 王小雷 SAS进阶《深入解析SAS》之开发多语言支持的SAS程序 SAS进阶《深入解析SAS》之开发多语言支持的SAS程序 1.多语言支持的应用程序是指该程序在世界给第使用时,其能够处理的数据,以及处理数据的方式、信息展现的方式都符合当地的语言、文化习惯,这要求应用程序运行时,能够自动进行与地区、语言相关的处理,也就是通常所说的国际化。

2.SBCS、DBCS、MBCS 单字节字符集SBCS指在该字符集中的字符最多由2个字 1796 0 坎布里奇 Volatile关键字 多线程同步volatile关键字java虚拟机阅读 787 0 韩曙亮 【Java并发编程】线程共享变量可见性(volatile关键字使用场景分析|MESI缓存一致性协议|总线嗅探机制) 【Java并发编程】线程共享变量可见性(volatile关键字使用场景分析|MESI缓存一致性协议|总线嗅探机制) 55 0 +关注 littletigerbj 小虎,曾先后获得信息系统项目管理师(2009)、系统分析师(2011)和系统架构师(2012)资格证书,软考高级资格实战派辅导老师,致力于研究和传播软考新视角、新思维方法。

472 文章 0 问答 作者高分内容 更多 2018跟着小虎玩着去软考--《小虎新视角历年信息系统项目管理师试题讲解(2014-2017)》书中小诗 1221 湖北松滋历史上七大王氏望族 2930 截止2017年5月19日小虎软考粉丝有798人 1132 软考高级证书可以积分50分 1273 2018跟着小虎玩着去软考--信息系统项目管理师小虎视频讲解----考友评论 1402 文章排行榜 最热 最新 1 函数计算HTTP触发器支持异步,解放双手搭建Web服务 24433 2 从这些云原生企业身上,我看到了数字化创新者该有的样子 22686 3 阿里巴巴云数据仓库MaxCompute数据安全最佳实践 9475 4 OpenYurt开源之夏开始申请啦 15822 5 云开发两周年庆—游戏畅玩领好礼 15713 6 【转载】基于MaxCompute的大数据安全方案 13242 7 数据仓库的分层架构与演进 11955 8 【转载】大数据在线离线一体化解决方案最佳实践 12321 9 万字长文带你玩转阿里云ECS云服务器(涵盖ECS产品购买、ECS管理、ECS快速部署云盘服务、ECS快照原理) 83636 10 [版本更新]PolarDB-XonOSS提供冷热数据分离存储 5071 11 不破不立!Fastjson2.0性能炸裂,为了下一个十年 6319 12 开源之夏2022重磅来袭!欢迎报名阿里云PolarDB社区项目! 4885 13 大厂技术实现|图像检索及其在淘宝的应用@计算机视觉系列 5596 14 每周问答精选:PolarDB-X完全兼容MySQL吗? 4624 15 简历面试|不会讲故事的人到底有多吃亏 80721 16 PolarDB-X与X-DB、PolarDB 4512 17 开发者玩转机器学习不能错过的15篇深度文章! 3568 18 阿里云视频云互动虚拟技术,打造虚拟直播最佳沉浸式体验 3434 19 AliIAC智能音频编解码器:在有限带宽条件下带来更高质量的音频通话体验 2355 20 为天猫精灵开发一个日程小秘书 19532 1 复旦-阿里电子信息专业学位研究生专业实践基地合作对接会成功举行 81 2 Docker安装redis 100 3 快手实时数仓保障体系研发实践 205 4 PythonHttpServer实现服务监听和地址回调 8323 5 使用实践:Hologres锁介绍以及排查锁 91 6 一文详解|增长那些事儿 72 7 直播预告|PostgreSQL内核解读系列第一讲:PostgreSQL系统概述 76 8 Maxcompute-UNION数据类型对齐的方法 72 9 首次曝光!唯一全域最高等级背后的阿里云云原生安全全景图 63 10 模拟IDCspark读写MaxCompute实践 73 11 不止于观测|阿里云可观测套件正式发布 58 12 一日一技:使用Python翻译HTML中的文本字符串 69 13 GitHub正式上线CopilotAI编程工具:每月收费10美元,学生免费 62 14 1分钟Serverless搭建你的首个个人网站(完成就送猫超卡) 237 15 一文搞懂Vue3中slot插槽的使用! 92 16 一日一技:在Python里面实现链式调用 73 17 “智物智造”杯2022物联网创新应用大赛,你的idea改变世界! 312 18 新手必会的静态站点生成器——Gridsome 150 19 高能直播,大咖云集!邀你共启BizDevOps探索之路。

92 20 云端极简部署Svelte3聊天室 55 推荐文章 最新的产品福利,顶级大咖观点,尽在《开发者评测局》 大咖圆桌会:产学研共话BizDevOps。

开发技能PK竞技大赛第三期 乘风者计划邀您入驻社区,精彩权益即刻享 相关电子书 更多 JS零基础入门教程(上册) 立即下载 性能优化方法论 立即下载 手把手学习日志服务SLS,云启实验室实战指南 立即下载



請為這篇文章評分?