sizeof operátor – egy adott típus memóriaigényének meghatározása
Az sizeof
operátor egy adott típusú változó által elfoglalt bájtok számát adja vissza. Az operátor argumentumának sizeof
nem felügyelt típusnak vagy nem felügyelt típusnak korlátozott típusparaméternek kell lennie.
Az sizeof
operátornak nem biztonságos környezetre van szüksége. Az alábbi táblázatban bemutatott kifejezések azonban fordítási időben kiértékelésre kerülnek a megfelelő állandó értékekre, és nem igényelnek nem biztonságos környezetet:
Expression | Állandó érték |
---|---|
sizeof(sbyte) |
0 |
sizeof(byte) |
0 |
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) |
0 |
Nem kell nem biztonságos környezetet használnia, ha az operátor operandusa sizeof
egy számtípus neve.
Az alábbi példa az operátor használatát sizeof
mutatja be:
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)}");
}
}
Az sizeof
operátor több bájtot ad vissza, amelyeket a közös nyelvi futtatókörnyezet foglalna le a felügyelt memóriában. A szerkezettípusok esetében ez az érték bármilyen kitöltést tartalmaz, ahogy az előző példa is mutatja. Az operátor eredménye sizeof
eltérhet a Marshal.SizeOf metódus eredményétől, amely a nem felügyelt memória típusának méretét adja vissza.
C# nyelvspecifikáció
További információ: A C# nyelvspecifikáció operátorainak mérete.