Operator „sizeof“: Ermitteln des Arbeitsspeicherbedarfs eines bestimmten Typs

Der sizeof-Operator gibt die Anzahl der Bytes zurück, die von einer Variablen eines bestimmten Typs belegt werden. Das Argument für den sizeof-Operator muss der Name eines nicht verwalteten Typs oder eines Typparameters sein, der darauf beschränkt ist, ein nicht verwalteter Typ zu sein.

Der sizeof-Operator erfordert einen unsicheren Kontext. Die in der folgenden Tabelle dargestellten Ausdrücke werden jedoch in der Kompilierzeit auf die entsprechenden konstanten Werte ausgewertet und erfordern keinen unsicheren Kontext:

expression Konstanter Wert
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

Sie müssen auch keinen unsicheren Kontext verwenden, wenn der Operand des sizeof-Operators der Name eines Enumerationstyps ist.

Im folgenden Beispiel wird die Verwendung des sizeof-Operators veranschaulicht:

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)}");
    }
}

Der sizeof-Operator gibt die Anzahl der Bytes zurück, die von der Common Language Runtime im verwalteten Speicher belegt werden. Wie im vorherigen Beispiel veranschaulicht, enthält dieser Wert für Strukturtypen alle Auffüllzeichen. Das Ergebnis des sizeof-Operators unterscheidet sich möglicherweise von dem Ergebnis der Marshal.SizeOf-Methode, die die Größe eines Typs in nicht verwaltetem Speicher zurückgibt.

C#-Sprachspezifikation

Weitere Informationen finden Sie im Abschnitt Der sizeof-Operator in der C#-Sprachspezifikation.

Weitere Informationen