C#.NETプロジェクトで実行sizeof(int)
すると、戻り値は4になります。プロジェクトの種類をx64に設定したのに、なぜ8ではなく4と表示されるのでしょうか。これは、マネージコードを実行しているためですか?
7 に答える
64 ビット マシンでも 4 バイトを必要とするキーワードint
エイリアス。System.Int32
さまざまな 64 ビット データ モデルがあります。Microsoft は.NET にLP64を使用しています。 longとポインターは両方とも 64 ビットです (ただし、C スタイルのポインターは、C# でunsafe
コンテキスト内で、または IntPtr
ポインター演算に使用できない値としてのみ使用できます)。これを、 intも 64 ビットである ILP64 と比較してください。
したがって、すべてのプラットフォームでint
は 32 ビットであり、long
64 ビットです。System.Int32
これは、基になる型の名前とで確認できますSystem.Int64
。
anInt32
は、x86 および x64 では 4 バイトです。AnInt64
はどちらの場合も 8 バイトです。C#int
型は、 の単なるエイリアスですSystem.Int32
。両方のランタイム環境で同じです。ランタイム環境に応じて変化する唯一のタイプは次のIntPtr
とおりです。
unsafe
{
var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64
}
int
ポインターまたはSystem.IntPtr
. これは、x64 では 8 バイト、x86 では 4 バイトになります。ポインタのサイズは、メモリに 64 ビット アドレスがあることを示しています。( System.IntPtr.Size
x64 では == 8)
int
x86 と x64 のどちらを使用していても、の意味は依然として 4 バイトです。つまり、int
は常に に対応しSystem.Int32
ます。
Rememberint
は、基本型の単なるコンパイラ エイリアスですInt32
。int
64 ビット プラットフォームで 32 ビットしかない理由は明らかです。
int i;
int size = BitConverter.GetBytes(i).GetLength(0);