Buscar..


Introducción

El compilador GNU C viene con algunas características geniales que no están especificadas por los estándares C. Estas extensiones son muy utilizadas en el software del sistema y son una gran herramienta para la optimización del rendimiento.

Atributo embalado

empaquetado es un atributo variable que se utiliza con estructuras y uniones para minimizar los requisitos de memoria.

#include <stdio.h>
struct foo {
    int a;
    char c;
};

struct __attribute__((__packed__))foo_packed {
    int a;
    char c;
};

int main()
{
    printf("Size of foo: %d\n", sizeof(struct foo));
    printf("Size of packed foo: %d\n", sizeof(struct foo_packed));
    return 0;
}

En mi Linux de 64 bits,

  • Tamaño de la estructura foo = 8 bytes
  • Tamaño de la estructura foo_packed = 5 bytes

El atributo empaquetado frena el relleno de la estructura que realiza el compilador para mantener la alineación de la memoria.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow