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.