OVH Cloud OVH Cloud

sizeof(class)

2 réponses
Avatar
Cyrille \cns\ Szymanski
Si je définis une classe ou structure T vide, j'ai (BC++5.5) sizeof(T)==
8. Si par contre je lui ajoute un unique membre char, la taille passe à
1.

Pourquoi la taille d'une classe ou structure vide n'est pas nulle (en C
par exemple elle l'est je crois) ? Est-ce pour que le pointeur this ait
toujours un sens ?

Une classe est-elle toujours de taille non nulle ?

Y-a-t-il une valeur par défaut ?

Note: Je suis conscient que sizeof d'une structure est généralement
supérieur à la somme des sizeof des membres, et ce pour des questions
d'alignement/optimisation. De même que généralement il est alloué plus de
mémoire que nécessaire. Là n'est pas ma question.

--
_|_|_| CnS
_|_| for(n=0;b;n++)
_| b&=b-1; /*pp.47 K&R*/

2 réponses

Avatar
Christophe Lephay
"Cyrille "cns" Szymanski" a écrit dans le message de
news:
Une classe est-elle toujours de taille non nulle ?


Oui, pour preserver une forme d'identité (de manière à ce que des objets
différents aient bien une adresse différente, indépendemment de leur
taille)...

Y-a-t-il une valeur par défaut ?


1 est bien entendu le minimum. Après, la valeur réelle sépend des
contraintes d'alignement (ce qui peut expliquer le 8 que tu obtiens).

Chris

Avatar
Gabriel Dos Reis
"Cyrille "cns" Szymanski" writes:

| Pourquoi la taille d'une classe ou structure vide n'est pas nulle

parce qu'un objet occupe de la mémoire et deux objets différents
doivent avoir des addresses différentes.

| (en C par exemple elle l'est je crois) ?

un struct vide n'existe pas en C, donc la question ne se pose pas.

| Est-ce pour que le pointeur this ait toujours un sens ?

Pour tout objet, oui. Par définition.

| Une classe est-elle toujours de taille non nulle ?

Oui.

| Y-a-t-il une valeur par défaut ?

Non. Il faut voir la doc du compilo.

-- Gaby