記事のタイトルに深い意味はありません。
そんな感じのタイトルの作品があったなぁと思って。
概要
先日C#で簡単なツールを作っていたら、WOW64
の ファイル システム リダイレクト
がかかっていた。 Any CPU
でコンパイルしているはずなのに、とタスク マネージャーを見たら、おいおい 32bit プロセス
で動いているじゃねぇかFxxxxxck!
設定
プロジェクトの プロパティ
の ビルド
より 32bitを選ぶ
のチェックを外す。
(Visual Studo 20019の場合)
効果
言わずもがな、Java や CLR などのVM型実行環境って そもそも Any CPU
にこそ真価が有ると思うのだが。。。
-
Any CPUで動く。
- x86版 Windows では32bitで動く。
-
x86_64版 Windows では64bitで動く。
⇒ フォルダ リダイレクトがかからなくる。
⇒ 無計画にP/Invoke
するとBadImageException
で死にやすい。
(無計画が悪い。。。)
これ何のための設定?
-
対象プラットフォーム
にはAny CPU
でビルドしてるのに、
x86_64版 Windows
上でも32bit プログラム
として動かしたいってこと? なんで???? -
x86_64版 Windows
でもx86_64 モード
よりx86 モード
のプログラムの方が早い事が多いとか、そんな話?
(x86_64
CPU には 実行モードを切り替えるコンテキスト スイッチ
があり、 Windowsではプロセス単位で切り替えに対応し、 ネイティブ コード で実行させていたと思った。) -
AArch64
にも 32bit モードがあるらしいので、ARM CPU
も見据えた設定?
Visual Studio 20013から設定はあった様だけど、とりあえず全然意味が分からない。。。
(追記)
- -platform (C# コンパイラ オプション) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-options/platform-compiler-option
こういうこと?
arm版やia64版なんて持っていないからわからないけど。
(x86_64のx86モードを良しとするなら、ia64版やarm版 Windowsのx86エミューレーションも効いたりするのかな?)
platform:anycpu32bitpreferred
のARMがやっぱポイントなのかな?
参考
-
-platform (C# コンパイラ オプション) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-options/platform-compiler-option -
.net — Visual Studioの "Any CPU"ターゲットとはどういう意味ですか?
https://www.it-swarm.dev/ja/.net/visual-studio%E3%81%AE-any-cpu%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88%E3%81%A8%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%84%8F%E5%91%B3%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/958269106/ -
CLR via C# - Jeffrey Richter - Google ブックス
https://books.google.co.uk/books?id=36tCAwAAQBAJ&pg=PT38#v=onepage&q&f=false -
Visual Studioの[32ビット優先]設定の目的は何ですか、また実際にはどのように機能しますか?
https://qastack.jp/programming/12066638/what-is-the-purpose-of-the-prefer-32-bit-setting-in-visual-studio-and-how-does -
What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11 - DZone IoT
https://dzone.com/articles/what-anycpu-really-means-net -
Visual Studio 11 と .NET 4.5 で Microsoft が AnyCPU を再定義
https://www.infoq.com/jp/news/2012/04/anycpu_vs11/