sizeof-operator - bepaal het geheugengebruik voor een gegeven type
De operator sizeof
retourneert het aantal bytes dat wordt bezet door een variabele van een bepaald type. In veilige code moet het argument voor de operator sizeof
de naam zijn van een niet-beheerd type of een typeparameter die beperkt is tot een niet-beheerd type. Niet-beheerde typen omvatten alle numerieke typen, opsommingstypen en tuple- en structtypen waarbij alle leden niet-beheerde typen zijn.
De expressies die in de volgende tabel worden weergegeven, worden geƫvalueerd in de compilatietijd naar de bijbehorende constante waarden en vereisen geen onveilige context:
Uitdrukking | 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 |
In onveilige code kan het argument voor sizeof
aanwijzertypen en beheerde typen bevatten, inclusief niet-beperkte typeparameters. Voorbeelden hiervan zijn object
en string
.
In het volgende voorbeeld ziet u het gebruik van de operator 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)}");
}
}
De operator sizeof
retourneert het aantal bytes dat is toegewezen door de algemene taalruntime in het beheerde geheugen. Voor struct typen bevat die waarde enige opvulling, zoals het voorgaande voorbeeld aantoont. Het resultaat van de sizeof
-operator kan verschillen van het resultaat van de Marshal.SizeOf methode, die de grootte van een type in onbeheerde geheugen retourneert.
Wanneer het argument een beheerd type is, retourneert de sizeof
-operator in onveilige code de grootte van een verwijzing, niet het aantal bytes dat is toegewezen voor een exemplaar van dat type.
Belangrijk
De waarde die door sizeof
wordt geretourneerd, kan verschillen van het resultaat van Marshal.SizeOf(Object), wat de grootte van het type in onbeheerd geheugen retourneert.
C#-taalspecificatie
Zie De grootte van de operator sectie van de C#-taalspecificatievoor meer informatie.