différence entre une struc et union [C C++] - C - Programmation
Marsh Posté le 26-11-2003 à 12:12:34
dans une struct, les champs mémoires sont contigus et il existe une zone mémoire par membre de la struct.
dans une union, tu peux avoir autant de membres que tu veux, mais une seule zone mémoire qui sera de la taille de ton plus grand membre.
edit: pour être plus clair, une struct peut contenir autant de données que tu veux, mais une union ne peut avoir qu'une seule donnée à la fois, même si tu en déclares plusieurs
Marsh Posté le 26-11-2003 à 12:17:10
Citation : dans une struct, les champs mémoires sont contigus |
Heuuh .. il peut y avoir des "trous" entre les éléments il me semble, non ?
Marsh Posté le 26-11-2003 à 12:18:17
Cricri_ a écrit :
Heuuh .. il peut y avoir des "trous" entre les éléments il me semble, non ? |
si il peut y a avoir quelques bourrages
Marsh Posté le 26-11-2003 à 12:19:43
Cricri_ a écrit :
Heuuh .. il peut y avoir des "trous" entre les éléments il me semble, non ? |
exact, du "bourrage" pour avoir un nombre pair d'octets.
Code :
|
Marsh Posté le 26-11-2003 à 12:21:26
ReplyMarsh Posté le 26-11-2003 à 12:22:26
ReplyMarsh Posté le 26-11-2003 à 12:31:36
Harkonnen a écrit : dans une struct, les champs mémoires sont contigus et il existe une zone mémoire par membre de la struct. |
pas claire pour moi ? (et je vois pas très bien quand utiliser l'un plutot que l'autre)
Marsh Posté le 26-11-2003 à 12:31:50
moktar1er a écrit : |
rien à voir, c'est pour une question de performance. on a des machines 32bits, il va essayer d'aligner sur 32bits.
gcc
-Wpacked
-Wpadded
-fpack-struct
Marsh Posté le 26-11-2003 à 12:33:03
ben fait une union et une struct avec la même chose. regarde les tailles de l'union et de la structure, regarde les adresses des memebres
Marsh Posté le 26-11-2003 à 12:33:14
euh ouais OK ... j'aurais du donner tout le détails de ma pensée ...
pair->multiple de 32 etc. etc.
Marsh Posté le 26-11-2003 à 12:34:52
moktar1er a écrit : euh ouais OK ... j'aurais du donner tout le détails de ma pensée ... |
bref ça depend de ton architecture, les bourrage n'est pas obligatoire, loin de la
Marsh Posté le 26-11-2003 à 12:37:46
startx25 a écrit : |
Code :
|
ceci réserve suffisamment d'espace mémoire pour les 3 champs. (9 octets dans le cas d'un int de 4 octets). chaque champ sera donc accessible sans problème et aura sa propre valeur.
par contre :
Code :
|
ne réservera que l'espace mémoire nécessaire à un double (type le plus grand de l'union). donc si tu écris ça :
Code :
|
ça écrasera la valeur de test.a et test.c, ce qui n'est pas le cas dans une struct
Marsh Posté le 26-11-2003 à 12:48:55
et au sens des types ? ça signifie quoi ?
Marsh Posté le 26-11-2003 à 13:17:53
que c'est comme d'habitude du très bas niveauet que
Code :
|
a un comportement indéfini
seul
Code :
|
est bien défini est sur.
on utilise les union, soit pour faire des hacks (j'avais fait une démo à crisbk pour attraper un pointeur de fonction membre en C++), soit pour faire une économie d'espace auquel cas on adjoint une enum qui sert à indiquer le type/le champ à utiliser
Marsh Posté le 26-11-2003 à 14:02:11
Taz a écrit : que c'est comme d'habitude du très bas niveauet que
|
A+,
PS. Comme j'ai aucune chance de corriger Taz sur le C++, je me rattrape sur l'orthographe
Marsh Posté le 26-11-2003 à 14:09:15
je me demande si c'est à moi que Taz répondait.
Marsh Posté le 26-11-2003 à 14:33:43
ben demande ce que tu veux j'au pas bien compris ce que tu voulais
Marsh Posté le 26-11-2003 à 14:36:12
Taz a écrit : ben demande ce que tu veux j'au pas bien compris ce que tu voulais |
Moi je sais ce que je veux, mais je réfléchis encore à la réponse ...
en fait j'ai quand même l'impression que struct et union ont _exactement_ le même sens au niveau des types.
Marsh Posté le 26-11-2003 à 14:55:46
c'est pour ça qu'en essayant de mapper les unions sur un type somme ça foirait. Ils sont tous 2 des types produits. Seuls les enums (et les types primitifs, bien sur) sont des types somme.
Marsh Posté le 26-11-2003 à 12:10:12
désolé mais j'ai du mal a comprendre la différence en union et struct
surtout quand utiliser l'un ou l'autre
merci de laisser un commentaire