Ricerca…


introduzione

Il compilatore GNU C è dotato di alcune interessanti funzionalità che non sono specificate dagli standard C. Queste estensioni sono ampiamente utilizzate nei software di sistema e rappresentano un ottimo strumento per l'ottimizzazione delle prestazioni.

Attributo imballato

packed è un attributo variabile che viene utilizzato con strutture e unioni per ridurre al minimo i requisiti di 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;
}

Sul mio Linux a 64 bit,

  • Dimensione della struct foo = 8 byte
  • Dimensione della struct foo_packed = 5 byte

l' attributo packed frena il riempimento della struttura che il compilatore esegue per mantenere l'allineamento della memoria.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow