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.

Lásd még