He definido en mi programa C una struct como se muestra a continuación:
typedef struct { long time_of_arrival; // Number of minutes after the salon opening when the customer arrived char customer_name[21]; // Upto 20 characters long in all caps char stylist_name[21]; // Preferred stylist name, upto 20 characters long or NONE, in all caps long loyalty_points; // The loyalty points customer holds long requested_haircut_time; // The time corresponding to the haircut customer requested long loyalty_points_earned; // The loyalty points customer earned } customer;Deseo crear una matriz de estructuras de tamaño según la cantidad de clientes proporcionada por el usuario a través del argumento de la línea de comando.
Para determinar la cantidad de memoria que ocuparía una sola instancia de dicha estructura en la memoria, ejecuté el siguiente fragmento de código:
int main(int argc, char const *argv[]) { printf("%ld\n", sizeof(customer)); return 0; }que imprimió el siguiente resultado:
80 Sin embargo, en mi comprensión limitada, el tamaño debe ser de 74 bytes , es decir, 8 bytes para cada variable long y 21 x 2 bytes para las dos matrices de caracteres.
Luego de una depuración adicional (es decir, al crear una matriz independiente de 21 caracteres y verificar su tamaño con el operador sizeof , que se informó como 21 bytes ), llegué a la conclusión de que, por alguna razón, el tamaño de la matriz de caracteres debajo de la estructura se redondeaba a el múltiplo de 8 bytes.
Necesito ayuda para comprender qué fenómeno es responsable de este comportamiento y qué es lo que me falta aquí.
Nota: Estoy creando el programa C usando Apple clang versión 13.0.0 (clang-1300.0.29.3) que se ejecuta en macOS 12.0.1 (21A559) .