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#.