yohhoyの日記

技術的メモをしていきたい日記

記事"C#メモリモデルの理論と実践"

プログラミング言語C#とメモリモデルに関するMSDNマガジンの記事。C#におけるvolatileキーワードの意味論と、各種アーキテクチャ(x86-x64/Itanium/ARM)への実装マッピングについて言及されている。

メモ:“ループ読み取りのホイスト(Loop Read Hoisting)”はコンパイラによるループ処理最適化の一種。ループ中では不変と判断される変数値について、ループ処理前へ移動(引き上げ; hoist)してRead回数を削減する最適化技法。*1

メモ:“読み取りの省略(Read Elimination)”にて「ただし、バージョン4までの.NET Frameworkではこのケースが適切に処理されないことを指摘しておかなければなりません。実際、_Aフィールドをvolatileとマークしても読み取り順序の入れ替えは避けられません。この問題は、.NET Frameworkバージョン4.5で解決されました。」との言及あり。.NET Framework 4以前にはJava 1.4以前と同種の問題*2があった?どちらかというと仕様ではなく実装の問題のように読める。

関連URL