Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Operatorn sizeof returnerar antalet byte som används av en variabel av en viss typ. I säker kod måste argumentet till operatorn sizeof vara namnet på en inbyggd ohanterad typ vars storlek inte är plattformsberoende.
C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.
Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.
Tips/Råd
Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.
Uttrycken som presenteras i följande tabell utvärderas vid kompileringstiden till motsvarande konstanta värden och kräver ingen osäker kontext:
| Uttryck | Konstant värde |
|---|---|
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 |
Storleken på typerna i föregående tabell är en kompileringskonstant.
I osäker kod kan du använda sizeof på valfri icke-typvoid , inklusive typer som har konstruerats från typparametrar.
- Storleken på en referens- eller pekartyp är storleken på en referens eller pekare, inte storleken på det objekt som den kan referera till.
- Storleken på en värdetyp, ohanterad eller inte, är storleken på ett sådant värde.
- Storleken på en
ref structtyp är värdets storlek. Storleken på varjereffält är storleken på en referens eller pekare, inte storleken på det värde som det refererar till.
I följande exempel visas användningen av operatorn 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)}");
}
}
Operatorn sizeof ger tillbaka antalet byte som allokerats av Common Language Runtime i hanterat minne. För struct- typer innehåller detta värde all utfyllnad, vilket visas i föregående exempel. Resultatet av sizeof-operatorn kan skilja sig från resultatet av Marshal.SizeOf-metoden, som returnerar storleken på en typ i ohanterat minne.
Viktig
Värdet som returneras av sizeof kan skilja sig från resultatet av Marshal.SizeOf(Object), som returnerar storleken på typen i ohanterat minne.
Språkspecifikation för C#
Mer information finns i Avsnittet storlek på operatorn i C#-språkspecifikationen.