Remarque
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 doit être le nom d’un type non managé intégré dont la taille n’est pas dépendante de la sizeof plateforme.
La documentation de référence du langage C# décrit la version la plus récente du langage C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.
La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.
Conseil / Astuce
Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.
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 des types dans le tableau précédent est une constante au moment de la compilation.
Dans du code non sécurisé , vous pouvez l’utiliser sizeof sur n’importe quel typevoid , y compris les types construits à partir de paramètres de type.
- La taille d’une référence ou d’un type de pointeur est la taille d’une référence ou d’un pointeur, et non la taille de l’objet auquel il peut faire référence.
- La taille d’un type valeur, non managée ou non, est la taille d’une telle valeur.
- La taille d’un
ref structtype est la taille de la valeur. La taille de chaquerefchamp est la taille d’une référence ou d’un pointeur, et non la taille de la valeur à laquelle 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
Console.WriteLine(sizeof(nint)); // output: 8 on 64-bit, 4 on 32-bit
Console.WriteLine(sizeof(nuint)); // output: 8 on 64-bit, 4 on 32-bit
Console.WriteLine(sizeof(Span<int>)); // output: 16 on 64-bit, 12 on 32-bit
}
}
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#.