Operatore sizeof - determina le esigenze di memoria per un determinato tipo

L'operatore sizeof restituisce il numero di byte occupati da una variabile di un tipo specificato. L'argomento dell'operatore sizeof deve essere il nome di un tipo non gestito o un parametro di tipo vincolato a un tipo non gestito.

L'operatore sizeof richiede un contesto unsafe. Tuttavia, per le espressioni presentate nella tabella seguente vengono restituiti i valori costanti corrispondenti in fase di compilazione e non è richiesto un contesto unsafe:

Expression Valore costante
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

Non è inoltre necessario usare un contesto unsafe quando l'operando dell'operatore sizeof è il nome di un tipo enum.

Nell'esempio seguente viene illustrato l'uso dell'operatore 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
        }
    }

    static unsafe void DisplaySizeOf<T>() where T : unmanaged
    {
        Console.WriteLine($"Size of {typeof(T)} is {sizeof(T)}");
    }
}

L'operatore sizeof restituisce un numero di byte che verrebbero allocati dal Common Language Runtime in managed memory. Per i tipi struct questo valore include l'eventuale riempimento, come illustrato nell'esempio precedente. Il risultato dell'operatore sizeof può essere diverso da quello del metodo Marshal.SizeOf, che restituisce le dimensioni di un tipo nella memoria non gestita.

Specifiche del linguaggio C#

Per altre informazioni, vedere la sezione Operatore sizeof della specifica del linguaggio C#.

Vedi anche