¿Cómo evitar el relleno de estructura en C?

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));
}
Producción:

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));
}
Producción:

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));
}
Producción:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *