“易失性”的示例;阻止 C# 中的编译器优化?

发布于 2024-08-22 12:35:42 字数 302 浏览 3 评论 0原文

据我了解,C# 中的“易失性”修饰符有两个作用:

  1. 根据目标处理器的需要插入栅栏
  2. 防止某些编译器优化

在 x86 / amd64 上,(1) 是无关紧要的。这些处理器不需要用于易失性语义的栅栏。 (不过 ia64 是不同的。)

所以,我们只剩下(2)了。但是,对于我尝试过的示例,易失性对 jit-ted 程序集没有任何影响。

我的问题是:您能否给出一个 C# 代码示例示例,其中在字段上添加“易失性”修饰符会导致不同的 jit-ted 汇编代码?

From what I understand, the 'volatile' modifier in C# has two effects:

  1. Inserts fences as necessary for the target processor
  2. Prevents certain compiler optimizations

On x86 / amd64, (1) is irrelevant. Those processors don't require fences for volatile semantics. (ia64 is different, though.)

So, we are down to (2). But, for examples that I tried, volatile does not make any difference to the jit-ted assembly.

My question is: Can you give an example of a C# code sample where adding a 'volatile' modifier on a field results in different jit-ted assembly code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

嘴硬脾气大 2024-08-29 12:35:42

也许就是你寻找。

Maybe this is what you are looking for.

GRAY°灰色天空 2024-08-29 12:35:42

Marc Gravell 有一个 可重复的示例说明缺少 volatile 关键字如何导致问题。

还讨论了 此处

值得注意的是(正如 Marc 所做的那样),编译器优化仅在发布模式下编译时才会出现。

Marc Gravell has an repeatable example of how the lack of a volatile keyword can cause problems.

It's also discussed here.

It's worth noting (as Marc does) that the compiler optimisations are only seen when compiled in Release mode.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文