Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9739

【.NET】 私、 [対象プラットフォーム] は [Any CPU] でって言ったよね!

$
0
0

記事のタイトルに深い意味はありません。

そんなタイトルの作品があったなぁと思って。

概要

先日C#で簡単なツールを作っていたら、WOW64ファイル システム リダイレクトがかかっていた。 Any CPUでコンパイルしているはずなのに、とタスク マネージャーを見たら、おいおい 32bit プロセスで動いているじゃねぇかFxxxxxck!

設定

プロジェクトの プロパティビルドより 32bitを選ぶのチェックを外す。
(Visual Studo 20019の場合)

Visual Studo 20019.png

効果

言わずもがな、JavaCLRなどのVM型実行環境って そもそも Any CPUにこそ真価が有ると思うのだが。。。

  • Any CPUで動く。
    • x86版 Windows では32bitで動く。
    • x86_64版 Windows では64bitで動く。
      ⇒ フォルダ リダイレクトがかからなくる。
      ⇒ 無計画に P/Invokeすると BadImageExceptionで死にやすい。
           (無計画が悪い。。。:sweat_smile:)

これ何のための設定?

  • 対象プラットフォームには Any CPUでビルドしてるのに、
    x86_64版 Windows上でも 32bit プログラムとして動かしたいってこと? なんで????:thinking:
  • x86_64版 Windowsでも x86_64 モードより x86 モードのプログラムの方が早い事が多いとか、そんな話?:thinking:
    ( x86_64 CPU には 実行モードを切り替える コンテキスト スイッチがあり、 Windowsではプロセス単位で切り替えに対応し、 ネイティブ コードで実行させていたと思った。)
  • AArch64にも 32bit モードがあるらしいので、 ARM CPUも見据えた設定? :thinking:

Visual Studio 20013から設定はあった様だけど、とりあえず全然意味が分からない。。。

(追記)

matrix.png

こういうこと?
arm版やia64版なんて持っていないからわからないけど。
(x86_64のx86モードを良しとするなら、ia64版やarm版 Windowsのx86エミューレーションも効いたりするのかな?)
platform:anycpu32bitpreferred (赤枠) のARMがやっぱポイントなのかな?


Viewing all articles
Browse latest Browse all 9739

Trending Articles