开发者

Example of 'volatile' preventing a compiler optimization in C#?

开发者 https://www.devze.com 2022-12-21 02:50 出处:网络
From what I understand, the \'volatile\' modifie开发者_StackOverflowr in C# has two effects: Inserts fences as necessary for the target processor

From what I understand, the 'volatile' modifie开发者_StackOverflowr 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?


Maybe this is what you are looking for.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消