Question

Je me demande pourquoi les deux types suivants

struct {
    double re[2];
};

et

double re[2];

a la même taille en C? Struct n'aide-t-il pas un peu plus la taille?

Était-ce utile?

La solution

Non, il compose simplement tous les éléments en un élément de niveau supérieur dont la taille correspond simplement à la taille de chaque élément ajouté (plus un remplissage dépend des règles d'alignement, mais cela sort du domaine de cette question).

Autres conseils

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 ordinateur requiert que double soit aligné sur une limite de 8 octets (et sizeof (double) == 8 , ce qui est normal mais non prévu par la norme ), vous constaterez que la structure occupe 16 octets.

Non, la structure n'a rien à ajouter. 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 ne génère 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 égale à zéro. Une structure doit avoir une taille différente de zéro, car chaque objet 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 qui n’a pas de surcharge au moment de l’exécution.

C est extrêmement "nu" la langue, ce qui signifie que rien n'est là-bas sauf si requis Alors posez-vous la question "Quels frais généraux une structure nécessite-t-elle?" Et vous n'en trouverez aucune.

Non, ça ne marche pas.

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

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

non, le type de structure en C, mais juste la disposition séquentielle des membres en mémoire

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top