Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 de naam zijn van een ingebouwd, niet-beheerd type waarvan de sizeof grootte niet afhankelijk is van het platform.
De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.
De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.
Aanbeveling
Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.
De expressies die in de volgende tabel worden weergegeven, worden tijdens het compileren geëvalueerd op 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 |
De grootte van de typen in de voorgaande tabel is een compilatieconstante.
In onveilige code kunt u elk niet-typevoid gebruikensizeof, inclusief typen die zijn samengesteld op basis van typeparameters.
- De grootte van een verwijzing of aanwijzer is de grootte van een verwijzing of aanwijzer, niet de grootte van het object waarnaar het verwijst.
- De grootte van een waardetype, onbeheerd of niet, is de grootte van een dergelijke waarde.
- De grootte van een
ref structtype is de grootte van de waarde. De grootte van elkrefveld is de grootte van een verwijzing of aanwijzer, niet de grootte van de waarde waarnaar wordt verwezen.
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
Console.WriteLine(sizeof(nint)); // output: 8 on 64-bit, 4 on 32-bit
Console.WriteLine(sizeof(nuint)); // output: 8 on 64-bit, 4 on 32-bit
Console.WriteLine(sizeof(Span<int>)); // output: 16 on 64-bit, 12 on 32-bit
}
}
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.
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.