Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der operator sizeof gibt die Anzahl der Byte zurück, die von einer Variablen eines bestimmten Typs belegt sind. Im sicheren Code muss das Argument für den sizeof Operator der Name eines integrierten nicht verwalteten Typs sein.
Die in der folgenden Tabelle dargestellten Ausdrücke werden zur Kompilierungszeit zu den entsprechenden Konstantenwerten ausgewertet und erfordern keinen unsicheren Kontext:
| Ausdruck | 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 |
Die Größe eines integrierten, nicht verwalteten Typs ist eine Kompilierungszeitkonstante.
Im unsicheren Code können Sie wie folgt verwenden sizeof :
- Ein Typparameter, der auf einen nicht verwalteten Typ beschränkt ist, gibt die Größe dieses nicht verwalteten Typs zur Laufzeit zurück.
- Ein verwalteter Typ oder ein Zeigertyp gibt die Größe des Bezugs oder Zeigers zurück, nicht die Größe des Objekts, auf das es verweist.
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 operator sizeof gibt die Anzahl der Byte zurück, die von der Common Language Runtime im verwalteten Speicher zugewiesen wurden. Wie im vorherigen Beispiel veranschaulicht, enthält dieser Wert für Strukturtypen alle Auffüllzeichen. Das Ergebnis des sizeof-Operators unterscheidet sich möglicherweise vom Ergebnis der Marshal.SizeOf-Methode, die die Größe eines Typs in nicht verwalteten Arbeitsspeicher zurückgibt.
Wichtig
Der von sizeof zurückgegebene Wert kann vom Ergebnis Marshal.SizeOf(Object)abweichen, wodurch die Größe des Typs im nicht verwalteten Speicher zurückgegeben wird.
C#-Sprachspezifikation
Weitere Informationen finden Sie im Abschnitt Der sizeof-Operator in der C#-Sprachspezifikation.