sizeof operator - bepaal de geheugenbehoeften voor een bepaald type
De sizeof
operator retourneert het aantal bytes dat wordt bezet door een variabele van een bepaald type. Het argument voor de sizeof
operator moet de naam zijn van een niet-beheerd type of een typeparameter die is beperkt tot een niet-beheerd type.
De sizeof
operator vereist een onveilige context. De expressies die in de volgende tabel worden weergegeven, worden echter geƫvalueerd in de compilatietijd naar de bijbehorende constante waarden en vereisen geen onveilige context:
Expression | Constante waarde |
---|---|
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 |
U hoeft ook geen onveilige context te gebruiken wanneer de operand van de sizeof
operator de naam van een enum-type is.
In het volgende voorbeeld ziet u het gebruik van de sizeof
operator:
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)}");
}
}
De sizeof
operator retourneert een aantal bytes die worden toegewezen door de algemene taalruntime in het beheerde geheugen. Voor structtypen bevat die waarde eventuele opvullingen, zoals in het voorgaande voorbeeld wordt gedemonstreerd. Het resultaat van de sizeof
operator kan afwijken van het resultaat van de Marshal.SizeOf methode, waardoor de grootte van een type in onbeheerd geheugen wordt geretourneerd.
C#-taalspecificatie
Zie de sectie Grootte van de operator van de C#-taalspecificatie voor meer informatie.