Maison >développement back-end >C++ >Pourquoi les classes vides en C ont-elles une taille de 1 octet et non de 0 octet ?

Pourquoi les classes vides en C ont-elles une taille de 1 octet et non de 0 octet ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-14 19:12:12167parcourir

Why Do Empty Classes in C   Have a Size of 1 Byte, Not 0 Bytes?

Comprendre la taille des objets de classe vides

En C, même les classes apparemment vides ont une taille non nulle. On pourrait supposer que ce serait 0 octet, mais ce n’est pas le cas. Cette question examine les raisons de ce comportement.

Pour illustrer cela, considérons le programme suivant :

#include <iostream>
using namespace std;

class Empty {};

int main()
{
    Empty e;
    cerr << sizeof(e) << endl;
    return 0;
}

Si l'on compile ce programme, la sortie sur différents compilateurs (par exemple, Visual C et Cygwin-g ) est systématiquement de 1 octet. Cela peut sembler inattendu puisque l'objet ne contient aucun membre de données.

Pourquoi 1 octet ?

Le compilateur attribue une taille de 1 octet à un objet de classe vide pour garantir que différents objets ont des adresses uniques. Cette distinction est cruciale pour une bonne gestion de la mémoire et pour éviter les problèmes d'alias.

Pourquoi pas 4 octets (mot machine) ?

On pourrait s'attendre à ce que la taille de l'objet s'aligne avec la taille du mot machine (32 ou 64 bits), mais ce n'est pas le cas. Les problèmes d'alignement ne sont plus pertinents pour les classes vides car il n'y a pas de données membres à aligner. Par conséquent, le compilateur optimise l'espace en attribuant la taille minimale réalisable : 1 octet.

Justification de taille non nulle

Une taille de 0 octet impliquerait que deux objets de une classe vide pourrait occuper le même emplacement mémoire, rendant impossible leur distinction. Cette ambiguïté pourrait conduire à un comportement indéfini dans le programme. Par conséquent, une taille non nulle (dans ce cas, 1 octet) garantit des adresses uniques et maintient l'intégrité du programme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn