sizeof 演算子 - 特定の型に必要なメモリ量を確認する
sizeof
は、指定された型の変数が占有しているバイト数を返します。 sizeof
演算子への引数は、アンマネージド型の名前、またはアンマネージド型に制限される型パラメーターである必要があります。
sizeof
演算子には unsafe コンテキストが必要です。 ただし、次の表に示す式は、コンパイル時に対応する定数値に評価され、unsafe コンテキストを必要としません。
正規表現 | 定数値 |
---|---|
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 |
sizeof
演算子のオペランドが列挙型の名前である場合も、unsafe コンテキストを使用する必要はありません。
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
}
}
static unsafe void DisplaySizeOf<T>() where T : unmanaged
{
Console.WriteLine($"Size of {typeof(T)} is {sizeof(T)}");
}
}
sizeof
演算子は、マネージド メモリ内の共通言語ランタイムによって割り当てられるバイト数を返します。 構造体型の場合、前の例のように、その値に埋め込みが含まれます。 sizeof
演算子の結果は、アンマネージド メモリの型のサイズを返す Marshal.SizeOf メソッドの結果とは異なる場合があります。
C# 言語仕様
詳細については、C# 言語仕様の sizeof 演算子に関するセクションを参照してください。
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET