sizeof (C# リファレンス)sizeof (C# Reference)

アンマネージ型のサイズ (バイト単位) を取得するときに使用します。Used to obtain the size in bytes for an unmanaged type.

アンマネージド型には次のようなものがあります。Unmanaged types include:

  • 次の表は単純型の一覧です。The simple types that are listed in the following table:

    正規表現Expression 定数値Constant value
    sizeof(sbyte) 11
    sizeof(byte) 11
    sizeof(short) 22
    sizeof(ushort) 22
    sizeof(int) 44
    sizeof(uint) 44
    sizeof(long) 88
    sizeof(ulong) 88
    sizeof(char) 2 (Unicode)2 (Unicode)
    sizeof(float) 44
    sizeof(double) 88
    sizeof(decimal) 1616
    sizeof(bool) 11
  • 列挙型。Enum types.

  • ポインター型。Pointer types.

  • 参照型または構築された型である任意のインスタンス フィールドまたは自動実装インスタンス プロパティが含まれていないユーザー定義の構造体。User-defined structs that do not contain any instance fields or auto-implemented instance properties that are reference types or constructed types.

次の例は、int のサイズを取得する方法を示しています。The following example shows how to retrieve the size of an int:

// Constant value 4:
int intSize = sizeof(int);


C# のバージョン 2.0 以降、sizeof を単純型または列挙型に適用する場合、そのコードを unsafe コンテキストでコンパイルする必要がなくなりました。Starting with version 2.0 of C#, applying sizeof to simple or enum types no longer requires that code be compiled in an unsafe context.

sizeof 演算子はオーバーロードできません。The sizeof operator cannot be overloaded. sizeof 演算子により返される値の型は int です。The values returned by the sizeof operator are of type int. 上記の表に、特定の単純型をオペランドとする sizeof 式と、代用される定数値を示します。The previous table shows the constant values that are substituted for sizeof expressions that have certain simple types as operands.

struct など、その他の型については、sizeof 演算子はアンセーフ コード ブロックでのみ使用できます。For all other types, including structs, the sizeof operator can be used only in unsafe code blocks. Marshal.SizeOf メソッドを使用できますが、このメソッドによって返される値は常に sizeof によって返される値と同じとは限りません。Although you can use the Marshal.SizeOf method, the value returned by this method is not always the same as the value returned by sizeof. Marshal.SizeOf は、型のマーシャリング後にサイズを返します。一方、sizeof は、共通言語ランタイムによって割り当てられたサイズ (埋め込みを含む) を返します。Marshal.SizeOf returns the size after the type has been marshaled, whereas sizeof returns the size as it has been allocated by the common language runtime, including any padding.


class MainClass
    // unsafe not required for primitive types
    static void Main()
        Console.WriteLine("The size of short is {0}.", sizeof(short));
        Console.WriteLine("The size of int is {0}.", sizeof(int));
        Console.WriteLine("The size of long is {0}.", sizeof(long));
    The size of short is 2.
    The size of int is 4.
    The size of long is 8.

C# 言語仕様C# language specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also