L’opérateur sizeof détermine les besoins en mémoire d’un type donné

L’opérateur sizeof retourne le nombre d’octets occupés par une variable d’un type donné. L’argument de l’opérateur sizeof doit être le nom d’un type non managé ou d’un paramètre de type qui est contraint comme type non managé.

L’opérateur sizeof nécessite un contexte unsafe. Toutefois, les expressions présentées dans le tableau suivant sont évaluées au moment de la compilation par rapport aux valeurs de constante correspondantes et ne nécessitent pas de contexte unsafe :

Expression Valeur constante
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

Vous n’avez pas non plus besoin d’utiliser un contexte unsafe quand l’opérande de l’opérateur sizeof est le nom d’un type enum.

L’exemple suivant illustre l’utilisation de l’opérateur 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’opérateur sizeof retourne un nombre d’octets qui seraient alloués par la Common Language Runtime dans la mémoire managée. Pour les types struct, cette valeur comprend le remplissage, comme le montre l’exemple précédent. Le résultat de l’opérateur sizeof peut différer de celui de la méthode Marshal.SizeOf, qui retourne la taille d’un type dans la mémoire non managée.

spécification du langage C#

Pour plus d’informations, consultez la section Opérateur sizeof de la spécification du langage C#.

Voir aussi