sizeof, operator — określanie potrzeb pamięci dla danego typu

Operator sizeof zwraca liczbę bajtów zajmowanych przez zmienną danego typu. Argumentem sizeof operatora musi być nazwa niezarządzanego typu lub parametru typu, który jest ograniczony jako typ niezarządzany.

Operator sizeof wymaga niebezpiecznego kontekstu. Jednak wyrażenia przedstawione w poniższej tabeli są obliczane w czasie kompilacji do odpowiednich wartości stałych i nie wymagają niebezpiecznego kontekstu:

Wyrażenie Stała wartość
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

Nie trzeba również używać niebezpiecznego kontekstu, gdy operand sizeof operatora jest nazwą typu wyliczenia .

W poniższym przykładzie pokazano użycie sizeof operatora:

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)}");
    }
}

Operator sizeof zwraca liczbę bajtów, które zostaną przydzielone przez środowisko uruchomieniowe języka wspólnego w pamięci zarządzanej. W przypadku typów struktur ta wartość zawiera dowolne wypełnienie, jak pokazano w poprzednim przykładzie. Wynik sizeof operatora może się różnić od wyniku Marshal.SizeOf metody, która zwraca rozmiar typu w niezarządzanej pamięci.

specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz sekcję operatorów sizeof specyfikacji języka C#.

Zobacz też