Résumé
Dans les langages de programmation C et C++, l'opérateur unaire sizeof donne la taille en bytes de son opérande. L'opérande peut être un spécificateur de type ou une expression. Les types primitifs tels que char, int ou void* (non exhaustif) ont une taille dépendante du système pour lequel le code est compilé, elle est généralement documentée pour chaque système. Les structures, quant à elles, contiennent souvent plusieurs champs de types différents, la taille totale dépend donc de l'alignement de ses champs ainsi que de son alignement total. La taille retournée peut alors compter un rembourrage (ou padding en anglais) après le dernier champ, cette taille peut alors servir pour connaitre l'intervalle en bytes entre les éléments d'un tableau du type donné. Les structures et classes vides ont une taille de 1 byte. Une exception à cette règle sont les structures packed, qui ne nécessite pas d'alignement (cela signifie qu'il est forcé à 1), dans ce cas la taille est la somme de la taille de tous les champs. À cet opérateur peut être donné une expression, auquel cas sizeof rend la taille du type résultant de l'expression. Lorsqu'un tableau est passé par type ou expression, l'opérateur renvoie la taille totale de tableau en bytes. Les valeurs retournées par cet opérande sont de type size_t (un type entier non signé défini par l'entête standard ). L'exemple suivant résume les valeurs retournées dans certains cas communs : int i = 21; size_t int_size = sizeof(int); // = 4 size_t i_size = sizeof(i); // = 4, car i de type "int" int table[10]; size_t int_table_size = sizeof(int[10]); // = 40 = 10 * sizeof(int) size_t table_size = sizeof(table); // = 40, car de type int[10] struct empty {}; size_t empty_size = sizeof(struct empty); // = 1 struct padded { char char0; // Rembourrage de 3 bytes pour aligner "number" sur 4 bytes. int number; // Aucun rembourrage, puisque le type "char" ne nécessite pas d'alignement (alignement = 1). char char1; // Rembourrage de fin de 3 bytes.
À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.