sizeof

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

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.

Description détaillée[modifier | modifier le code]

En C et C++, un char a par définition la taille de 1 byte. Donc sizeof(char) vaut toujours 1. Ceci est vrai même si un byte fait plus de 8 bits, ce qui est le cas sur des processeurs peu communs.

L'opérateur sizeof peut être appliqué à tous les types de données. Dans le cas où l'opérande est une expression, sizeof produit la taille du type du résultat de l'expression. La valeur d'une opération sizeof est de type size_t (un type entier non signé défini par l'entête standard <stddef.h>).

Utilité[modifier | modifier le code]

Dans plusieurs programmes, il est utile de connaitre la taille d'un type de données. Bien que pour n'importe quelle implémentation de C ou C++, la taille d'un type de données particulier soit constant, les tailles de mêmes types primitifs en C et C++ sont définies par l'implémentation. C'est important lors de l'attribution d'un bloc de mémoire d'une taille appropriée.

int *pointeur;

pointeur = malloc(10 * sizeof (int));

Dans cet exemple, malloc alloue de la mémoire et retourne un pointeur vers le bloc mémoire. La taille du bloc alloué est égale au nombre de bytes pour un seul objet de type int multiplié par 10, assurant assez d'espace pour 10 entiers.

On ne peut généralement pas présumer de la taille de tous types de données. Par exemple, même si la plupart des implémentations de C et C++ sur des systèmes 32-bits allouent 4 octets pour le type int, cette taille peut changer quand le code est porté vers un système différent. L'exception est le type char, dont la taille est toujours 1 dans toutes les implémentations de C. De plus, il est fréquemment difficile de prédire la taille de types composés comme les struct et les union, en raison du rembourrage. L'utilisation de sizeof permet la portabilité du code.