Requisitos previos: alineación de miembros de estructura, relleno y empaquetado de datos
En Estructura, a veces el tamaño de la estructura es mayor que el tamaño de todos los miembros de la estructura debido al relleno de la estructura .
A continuación se muestra un ejemplo de estructura de relleno:
// C program to show an example // of Structure padding #include <stdio.h> struct s { int i; char ch; double d; }; int main() { struct s A; printf("Size of A is: %ld", sizeof(A)); }
Size of A is: 16
Nota: Pero el tamaño real de todos los miembros de la estructura es de 13 bytes. Así que aquí se desperdician un total de 3 bytes.
Entonces, para evitar el relleno de estructura, podemos usar pragma pack así como un atributo.
A continuación se muestran las soluciones para evitar el relleno de estructura:
Programa-1: Usando pragma pack
// C program to avoid structure // padding using pragma pack #include <stdio.h> // To force compiler to use 1 byte packaging #pragma pack(1) struct s { int i; char ch; double d; }; int main() { struct s A; printf("Size of A is: %ld", sizeof(A)); }
Size of A is: 13
Programa-2: Usar atributo
// C program to avoid structure // padding using attribute #include <stdio.h> struct s { int i; char ch; double d; } __attribute__((packed)); // Attribute informing compiler to pack all members int main() { struct s A; printf("Size of A is: %ld", sizeof(A)); }
Size of A is: 13
Publicación traducida automáticamente
Artículo escrito por rutwik1410 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA