Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'operatore sizeof restituisce il numero di byte occupati da una variabile di un determinato tipo. Nel codice sicuro, l'argomento dell'operatore sizeof deve essere il nome di un tipo non gestito predefinito.
Le espressioni presentate nella tabella seguente vengono valutate in fase di compilazione con i valori costanti corrispondenti e non richiedono un contesto non sicuro:
| Espressione | 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 |
La dimensione di un tipo predefinito non gestito è una costante in fase di compilazione.
Nel codice unsafe è possibile usare sizeof come segue:
- Un parametro di tipo vincolato a un tipo non gestito restituisce le dimensioni del tipo non gestito in fase di esecuzione.
- Un tipo gestito o un puntatore restituisce le dimensioni del riferimento o del puntatore, non le dimensioni dell'oggetto a cui fa riferimento.
Nell'esempio seguente viene illustrato l'utilizzo 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 il numero di byte allocati da Common Language Runtime nella memoria gestita. Per tipi di struct, tale valore include qualsiasi spaziatura interna, come illustrato nell'esempio precedente. Il risultato dell'operatore sizeof può differire dal risultato del metodo Marshal.SizeOf, che restituisce le dimensioni di un tipo in memoria non gestita.
Importante
Il valore restituito da sizeof può differire dal risultato di Marshal.SizeOf(Object), che restituisce le dimensioni del tipo in memoria non gestita.
Specifica del linguaggio C#
Per ulteriori informazioni, consultare la sezione Operatore sizeof delle specifiche del linguaggio C# .