2012-02-09 6 views
11

IntPtr.Sizeを使用すると8になるはずです。しかし、私はまだWidnows 7 x64でx64マシンで4を得ています、なぜですか?Windows x64でIntPtr.sizeが4になるのはなぜですか?

+4

アプリケーションをx64ではなくx86(プロパティ>ビルド>プラットフォームターゲット)としてコンパイルしていますか? – Rob

+0

ここをクリックしてください:http://stackoverflow.com/questions/399003/is-the-sizeofsome-pointer-always-equal-to-four – htmldrum

答えて

17

ファイルのCPUアーキテクチャを確認してください、それはx86ですか? CPU any/64bit

11

64ビットオペレーティングシステムは、32ビットWindows環境をエミュレートするWOW64というエミュレートされた環境を実装しています。 x86(32ビット)を対象としたプログラムを構築しています。つまり、プロセスは32ビットプロセスとしてエミュレータで実行され、もちろんポインタは4バイト幅です。

x64またはAnyCPUをターゲットにするオプションを変更すると、プロセスが64ビットシステムで実行されているときに、ポインタのサイズは8バイトになります。

0

ビルドターゲットを確認してください:x86/x64または任意のCPU 設定がx86または任意のCPUの場合、intptrはおそらく4です。

より提案:

あなたはx64のモードでプログラムを実行する必要がない場合は、x64のモードは、パフォーマンスと容量の使用状況の両方にマイナスの影響を持っているためのx64にビルドターゲットを変更donn'tしてください。私はMSDNのオリジナル記事のリンクを忘れていましたが、主な理由はptrのサイズとGCの負担が増えたため、その記事を検索することができます。

7

任意のCPUアーキテクチャを選択した場合でも、VS2013には「32ビット優先」というプロジェクトプロパティの新しいオプションがあります。 IntPtr.Size = 8を取得するには、64ビット開発マシンでオフにする必要があります。

関連する問題