栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

易失性说明符在C / C ++ / Java中的使用

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

易失性说明符在C / C ++ / Java中的使用

因为您对这些用例感兴趣,所以我将解释第一个。请注意,这是从ac / c 的角度应用的,不确定我如何在Java中发挥作用,尽管我通常怀疑c / c

中的volatile和Java用于完全不同的情况。

内存映射的设备是处理器以与内存相同的方式而不是通过专用总线与之通信的外围设备。

假设您有一个带有映射的计时器的指示灯。通过向其内存地址写入1来打开照明灯,并且其内部计时器递减计数5秒钟并关闭照明灯并将存储位置重置为0。现在,您正在开发一个需要在某些事件后打开照明灯的ac程序。
,有时在计数器到期之前将其关闭。如果使用常规变量(倾向于作为此类应用程序的指针或引用)写入其内存位置,则由于编译器的优化,可能会出错。

如果您没有使用那么多的变量,并且在关闭照明后不久就打开了灯,并且没有其他任何使用该值的变量-
有时编译器将完全摆脱第一个赋值,否则它将只需将值保存在处理器寄存器中,而无需写入内存。在这两种情况下,光源始终不会打开,因为它的内存从未更改。

现在考虑另一种情况,您需要检查指示灯的状态并点亮。在此,该值从设备的存储器中提取并保存在处理器寄存器中。现在,几秒钟后,灯会自动熄灭。此后不久,您尝试再次打开该灯,但是由于您读取了该内存地址并且此后未进行任何更改,因此编译器假定该值仍为1,因此从不对其进行更改,尽管现在实际上为0。

通过使用易失性关键字,可以防止编译器在将代码转换为机器代码时做出任何这些假设,并确保所有这些特定操作均严格按照程序员的编写来执行。这对于内存映射设备至关重要,主要是因为处理器未严格更改内存位置。由于这些相同的原因,具有共享内存的多处理器系统在公共内存空间上运行时通常需要类似的做法。



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

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

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