Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’opérateur sizeof retourne le nombre d’octets occupés par une variable d’un type donné. Dans le code sécurisé, l’argument de l’opérateur sizeof doit être le nom d’un type non managé intégré.
Les expressions présentées dans le tableau suivant sont évaluées au moment de la compilation avec les valeurs constantes correspondantes et ne nécessitent pas de contexte non sécurisé :
| 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 |
La taille d’un type intégré non managé est une constante au moment de la compilation.
Dans le code non sécurisé , vous pouvez utiliser sizeof comme suit :
- Un paramètre de type qui est contraint d’être un type non managé retourne la taille de ce type non managé lors de l’exécution.
- Un type managé ou un type de pointeur retourne la taille de la référence ou du pointeur, et non la taille de l’objet auquel il fait référence.
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 le nombre d’octets alloués par le Common Language Runtime en mémoire managée. Pour struct types, cette valeur inclut tout remplissage, comme l’illustre l’exemple précédent. Le résultat de l’opérateur sizeof peut différer du résultat de la méthode Marshal.SizeOf, qui retourne la taille d’un type dans mémoire non managée.
Important
La valeur retournée par sizeof peut différer du résultat de Marshal.SizeOf(Object), qui retourne la taille du type en 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#.