La consortingbution de Struct à la taille du type

Je me demande pourquoi les deux types suivants

struct { double re[2]; }; 

et

 double re[2]; 

avoir la même taille en C? Struct n’ajoute-t-il pas un peu de surcharge de taille?

Non, il ne fait que composer tous les éléments en un élément de niveau supérieur dont la taille est simplement la taille des éléments individuels ajoutés (plus un remplissage en fonction des règles d’alignement, mais cela sort du cadre de la question).

Pas si ça peut aider – non. C évite les frais généraux comme la peste. Et précisément, cela évite les frais généraux dans ce contexte.

Si vous utilisez une structure différente, vous constaterez peut-être une différence:

 struct space_filled { char part0; double part1; }; 

Si votre machine a besoin de double pour être aligné sur une limite de 8 octets (et sizeof(double) == 8 , ce qui est normal mais non requirejs par la norme), vous constaterez que la structure occupe 16 octets.

Non, la structure n’a rien à append. Contrairement à Java ou .NET, où les classes (et les structures) ont de nombreuses autres responsabilités, en C et C ++, ce sont simplement des conteneurs utilisés pour contenir un certain nombre de membres de données. En C ++, ils peuvent être amenés à stocker un vtable pour résoudre les appels de fonction virtuels, le cas échéant, mais en général non, une structure elle-même n’a pas de surcharge.

La seule exception est la suivante:

 typedef struct {} empty; assert(sizeof(empty) > 0); 

La taille d’une structure vide ne sera pas zéro. Une structure doit avoir une taille différente de zéro car chaque object doit avoir une adresse unique. (Sinon, vous ne pourriez pas créer un tableau de ces structures)

Non, Struct n’ajoute aucune taille, ni aucune surcharge dans le C. compilé.

C’est une couche de syntaxe qui nécessite un travail supplémentaire de la part du compilateur, mais ne nécessite pas de surcharge lors de l’exécution.

C est un langage extrêmement “nu”, ce qui signifie que rien n’est là sauf si requirejs. Alors demandez-vous: “Quels frais généraux une structure requirejs-elle?”, Et vous n’en trouverez aucune.

Non ce n’est pas.

C’est l’un des avantages des structures (pourquoi elles ont été si utiles dans la programmation TCP / IP à l’ancienne).

C’est un bon moyen de représenter la disposition mémoire / tampon.

pas le type de structure en C juste mettre en séquence les membres en mémoire