49

C#.NETプロジェクトで実行sizeof(int)すると、戻り値は4になります。プロジェクトの種類をx64に設定したのに、なぜ8ではなく4と表示されるのでしょうか。これは、マネージコードを実行しているためですか?

4

7 に答える 7

53

64 ビット マシンでも 4 バイトを必要とするキーワードintエイリアス。System.Int32

于 2009-03-16T20:05:23.717 に答える
45

さまざまな 64 ビット データ モデルがあります。Microsoft は.NET にLP64を使用しています。 longとポインターは両方とも 64 ビットです (ただし、C スタイルのポインターは、C# でunsafeコンテキスト内で、または IntPtrポインター演算に使用できない値としてのみ使用できます)。これを、 intも 64 ビットである ILP64 と比較してください。

したがって、すべてのプラットフォームでintは 32 ビットであり、long64 ビットです。System.Int32これは、基になる型の名前とで確認できますSystem.Int64

于 2009-03-16T21:33:44.970 に答える
28

intInt32.NET 言語での意味。これは、32 ビット アーキテクチャと 64 ビット アーキテクチャ間の互換性のために行われました。

C#のすべての型と、それらが .NET に対応するものを示した表を次に示します。

于 2009-03-16T20:08:05.020 に答える
19

anInt32は、x86 および x64 では 4 バイトです。AnInt64はどちらの場合も 8 バイトです。C#int型は、 の単なるエイリアスですSystem.Int32。両方のランタイム環境で同じです。ランタイム環境に応じて変化する唯一のタイプは次のIntPtrとおりです。

    unsafe
    {
        var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64
    }
于 2009-03-16T20:14:28.547 に答える
14

intポインターまたはSystem.IntPtr. これは、x64 では 8 バイト、x86 では 4 バイトになります。ポインタのサイズは、メモリに 64 ビット アドレスがあることを示しています。( System.IntPtr.Sizex64 では == 8)

intx86 と x64 のどちらを使用していても、の意味は依然として 4 バイトです。つまり、intは常に に対応しSystem.Int32ます。

于 2009-03-16T20:09:53.923 に答える
6

Rememberintは、基本型の単なるコンパイラ エイリアスですInt32int64 ビット プラットフォームで 32 ビットしかない理由は明らかです。

于 2009-03-16T20:08:34.863 に答える
2
int i;
int size = BitConverter.GetBytes(i).GetLength(0);

フィドルのサンプル

于 2013-02-15T16:51:56.180 に答える