Visual C++ 易失性

2023-11-23

Visual C++ 中“易失性”的 MSDN 文档表明,除了确保读取始终从内存中读取以及写入始终相应地写入之外,写入具有“释放语义”,读取具有“获取语义”。

“易失性”的 C 规范包括第二部分(不要进行疯狂的优化),但不包括第一部分(内存栅栏)。

Visual C++ 中是否有任何方法可以仅获得“C”易失性行为,而无需内存栅栏?

我想强制一个变量始终位于堆栈上的固定位置,但我不想在每次对其进行赋值时占用内存栅栏的开销。

有没有简单的方法可以使用 Visual C++ 源代码来做到这一点?


Visual C++ 中是否有任何方法可以仅获得“C”易失性行为,而无需内存栅栏?

在 x86 上,在读取和写入时不会在程序集级别创建内存栅栏。volatile内存位置,因为在该平台上每个加载都有获取语义,每个存储都有释放语义。因此,对于 x86 上的 MSVC,volatile指令只是指示编译器防止加载和存储的重新排序,具体取决于您是从标记的内存位置写入还是读取volatile.

在 IA64 架构上,您只会遭受内存栅栏的“惩罚”,因为该平台的内存排序模型不能确保加载和存储的获取和释放语义。

请记住,此行为是 MSVC 特定的,而不是标准化语义volatile.

Update:根据 @ildjarn 的说法,您还会在 Windows 8 的 ARM 上看到内存栅栏,因为该平台也有像 IA64 这样的弱有序内存一致性模型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual C++ 易失性 的相关文章

随机推荐

  • 有没有办法使用 Kotlin 的暴露库运行原始 sql

    我正在尝试运行一些特定于 postgres 的 sql 并希望重用 Exposed 中的事务管理 暴露的有Transaction exec String 方法可能会做你想要的 看https github com JetBrains Expo
  • 模态对话框不关闭键盘

    我遇到了一个问题 即离开时键盘不会消失UITextField or UITextView in a UIModalPresentationFormSheet 此外 我创建了一个大按钮作为视图的背景 因此如果用户点击字段外部 它就会被触发 我
  • C++ 枚举是有符号的还是无符号的?

    C 枚举是有符号的还是无符号的 通过扩展 通过检查输入是否 您的最小值 假设您从 0 开始并增加 1 来验证输入是否安全 让我们追根溯源 以下是 C 03 标准 ISO IEC 14882 2003 文档 7 2 5 枚举声明 中的内容 枚
  • Android:在没有 Activity 或 Context 引用的情况下访问资源

    我发布这个问题是希望能得到某种明确的答案 如果没有活动或上下文引用 真的不可能访问资源吗 当所需的只是访问一些与 UI 无关的值 资产或字符串时 传递此类引用会导致代码过于复杂 加上所有那些潜在的悬挂参考 这也完全破坏了各种设计模式 例如单
  • 对于 i = 0,为什么 (i += i++) 等于 0?

    获取以下代码 可用作控制台应用程序 static void Main string args int i 0 i i Console WriteLine i Console ReadLine 的结果i是 0 我预计是 2 正如我的一些同事所
  • “异常:t 实例化期间出错!主插座已注册。”在科尔多瓦 Angular2 应用程序中

    我正在用我的项目构建一个简单的科尔多瓦应用程序 它有 2 层嵌套 主路由 gt 子路由 gt 另一个子路由 When trying to browse to the 2nd level another child route 我收到一条错误
  • Chrome 中检测浏览器打印事件有两种不同的方式

    我目前使用的是最新版本的 Chrome 43 0 2357 130 并且在从以下位置调用 print 时遇到打印功能的差异window print 与使用 P 相比 打印时使用window print 它正确输出到控制台 它输出Before
  • WPF FlowDocument - 绝对字符位置

    我有一个 WPF RichTextBox 我正在其中输入一些文本 然后解析整个文本以进行处理 在此解析过程中 我获得了每个单词的开头和结尾的绝对字符位置 我想使用这些字符位置对某些单词应用格式 但是 我发现 FlowDocument 使用
  • 将 Dictionary 转换为匿名对象?

    首先 为了让事情更清楚 我将从顶部解释我的场景 我有一个具有以下签名的方法 public virtual void SendEmail String from List
  • 如何删除包含 GridView 的空 div

    在 ASP NET Gridviews 中生成一个表 该表生成一个父 div 容器 这可能会破坏 CSS 布局 因为无法将样式附加到生成的 div 有没有办法阻止 div 生成或对其应用样式 已询问此问题并标记为已解决here但MS只是说d
  • 在 main() 之外处理 argc 和 argv

    如果我想将用于处理命令行参数的大部分代码保留在 main 之外 以便组织和更具可读性的代码 那么最好的方法是什么 void main int argc char argv lots of code here I would like to
  • 引用没有强名称的程序集

    有没有办法在没有强名称的情况下引用库 当我在引用中添加对程序集的引用并重建解决方案时 一切都很好 但是当我从此程序集解决方案调用该类时 它不会构建 输出表明引用的程序集应该具有强名称 最好的解决方案是什么 强命名库并不可取 我认为您遇到的问
  • Json.Net 可以嵌入到可执行文件中吗?

    我设置了 嵌入互操作类型 属性Netwonsoft Json图书馆到true它返回一个错误 Cannot embed interop types from assembly c path packages Newtonsoft Json 9
  • 在 JSPX 文件中包含 JS 文件(JQuery)

    我正在 Eclipse 中创建一个动态 Web 项目 几乎从头开始 并创建了一个 JSPX 文件 将其放置在 我打算使用Jquery UI 可排序我发现使用 JSPX 只有第一个脚本在 Firefox 和 IE 中加载
  • 如何使用Opencv轮廓单向描述线点

    我正在使用opencvsfindContour找到描述由线 而不是多边形 组成的图像的点 如下所示 cv findContours src contours hierarchy cv RETR EXTERNAL cv CHAIN APPRO
  • 在 javascript 中迭代颜色

    我想列出 css 中使用的所有颜色的列表 但它们似乎以 16 进制格式存储 我认为这样的事情可能会起作用 但它并没有达到我想要的效果 for x x lt 100 x color x toString 16 在 JavaScript 中 您
  • 如何重新启动独立的 Adob​​e Air/Flex 应用程序

    如何让独立的 Adob e Air Flex 应用程序自行重启 它不适用于以下建议的解决方案 http www colettas org p 267 任何帮助都会很棒 Thanks 你好亲爱的我已经修复了 Flex 4 6 的这个方法 pa
  • 日期时间格式如 HH:mm 24 小时,不含 AM/PM

    我在这里搜索关于将 16 20 这样的字符串转换为 DateTime 类型而不丢失格式 我说我不想添加 dd MM yyy 或秒或 AM PM 因为 db 只是接受这种格式 我还尝试过文化 提前致谢 只需为您的日期时间提供日期格式即可 st
  • 如何使用谷歌材料图标作为类而不是 标签

    根据指南中的谷歌材料网站我们必须在 中使用材质图标i 标签 问题是如何将图标添加为很棒的字体 就像是 Class material icons face 代替 i class material icons face i 是的 您可以使用 a
  • Visual C++ 易失性

    Visual C 中 易失性 的 MSDN 文档表明 除了确保读取始终从内存中读取以及写入始终相应地写入之外 写入具有 释放语义 读取具有 获取语义 易失性 的 C 规范包括第二部分 不要进行疯狂的优化 但不包括第一部分 内存栅栏 Visu