Bonjour,

Je me pose une question depuis quelque temps à propos de la taille des objets. Je vous propose mon programme source ici:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* Début du source */
 
class carac
{
	char c;
};
 
class petit
{
	short int p;
};
 
class grand
{
	long int g;
};
 
class combi1
{
	char c;
	short int p;
};
 
class combi2
{
	short int p;
	long int g;
};
 
 
int main(int argc, char* argv[])
{
	carac ob1;
	petit ob2;
	grand ob3;
	combi1 ob4;
	combi2 ob5;
 
	cout<<sizeof(ob1)<<"\t"<<sizeof(ob2)<<"\t";
	cout<<sizeof(ob3)<<"\t"<<sizeof(ob4)<<"\t";
	cout<<sizeof(ob5);
 
	return 0;
}
 
/* Fin du source */
Vous l'avez compris, ce programme sert à vérifier la taille occupée en mémoire par différentes instances de classes simples.

Le résultat est étonnant: autant les objets 1, 2 et 3 occupent une taille respective de 1, 2 et 4 octets, ce qui correspond bien à la taille des attributs qui les constituent, autant les objets 4 et 5 ne semblent pas suivre la même logique: j'attendais la valeur 3 pour l'objet 4 (1 octet pour le char + 2 pour le short), or sizeof renvoie la valeur 4. De même pour l'objet 5, on obtient une taille de 8 octets là où j'en attendait 6.

Je suppose que cela suit une certaine logique au niveau de la réservation mémoire, mais je n'en ai jamais entendu parler jusqu'ici. Est-ce que quelqu'un en saurait un peu plus et pourrait me fournir une explication?

Par avance merci.