sizeof 演算子は、特定の型の変数によって占有されるバイト数を返します。 セーフ コードでは、 sizeof 演算子の引数は、サイズがプラットフォームに依存しない組み込みの アンマネージ型 の名前である必要があります。
C# 言語リファレンスには、C# 言語の最新リリース バージョンが記載されています。 また、今後の言語リリースのパブリック プレビューの機能に関する初期ドキュメントも含まれています。
このドキュメントでは、言語の最後の 3 つのバージョンまたは現在のパブリック プレビューで最初に導入された機能を特定します。
ヒント
C# で機能が初めて導入された時期を確認するには、 C# 言語バージョン履歴に関する記事を参照してください。
次の表に示す式は、コンパイル時に対応する定数値に評価され、安全でないコンテキストは必要ありません。
| 表現 | 定数値 |
|---|---|
sizeof(sbyte) |
1 |
sizeof(byte) |
1 |
sizeof(short) |
2 |
sizeof(ushort) |
2 |
sizeof(int) |
4 |
sizeof(uint) |
4 |
sizeof(long) |
8 |
sizeof(ulong) |
8 |
sizeof(char) |
2 |
sizeof(float) |
4 |
sizeof(double) |
8 |
sizeof(decimal) |
16 |
sizeof(bool) |
1 |
前の表の型のサイズはコンパイル時定数です。
安全でないコードでは、型パラメーターから構築された型を含め、void以外の型でsizeofを使用できます。
- 参照型またはポインター型のサイズは、参照する可能性があるオブジェクトのサイズではなく、参照またはポインターのサイズです。
- アンマネージドかどうかにかかわらず、値型のサイズは、このような値のサイズです。
-
ref struct型のサイズは、値のサイズです。 すべてのrefフィールドのサイズは、参照する値のサイズではなく、参照またはポインターのサイズです。
次の例では、sizeof 演算子の使用方法を示します。
public struct Point
{
public Point(byte tag, double x, double y) => (Tag, X, Y) = (tag, x, y);
public byte Tag { get; }
public double X { get; }
public double Y { get; }
}
public class SizeOfOperator
{
public static void Main()
{
Console.WriteLine(sizeof(byte)); // output: 1
Console.WriteLine(sizeof(double)); // output: 8
DisplaySizeOf<Point>(); // output: Size of Point is 24
DisplaySizeOf<decimal>(); // output: Size of System.Decimal is 16
unsafe
{
Console.WriteLine(sizeof(Point*)); // output: 8
Console.WriteLine(sizeof(nint)); // output: 8 on 64-bit, 4 on 32-bit
Console.WriteLine(sizeof(nuint)); // output: 8 on 64-bit, 4 on 32-bit
Console.WriteLine(sizeof(Span<int>)); // output: 16 on 64-bit, 12 on 32-bit
}
}
static unsafe void DisplaySizeOf<T>() where T : unmanaged
{
Console.WriteLine($"Size of {typeof(T)} is {sizeof(T)}");
}
}
sizeof 演算子は、マネージド メモリ内の共通言語ランタイムによって割り当てられたバイト数を返します。
構造体 型の場合、前の例で示すように、その値にはパディングが含まれます。
sizeof 演算子の結果は、非管理 メモリ内の型のサイズを返す Marshal.SizeOf メソッドの結果と異なる場合があります。
重要
sizeof によって返される値は、アンマネージ メモリ内の型のサイズを返す Marshal.SizeOf(Object)の結果とは異なる場合があります。
C# 言語仕様
詳細については、「C# 言語仕様の「sizeof 演算子の」セクションを参照してください。
関連項目
.NET