Come rimuovere Imbottitura da una struttura C

February 19

Memoria del computer è generalmente allineato a un limite di dimensioni pari al formato parola di sistema. In un sistema a 32 bit ipotetica, immagino che questa dimensione parola è lunga quattro byte. Nel linguaggio C, è possibile creare strutture che memorizzano i dati. Per allinearle alla dimensione della parola, il compilatore C può aggiungere padding alla struttura. È possibile rimuovere questo imbottitura utilizzando una direttiva del preprocessore che dice di allineare i dati in modo diverso.

istruzione

1 Caricare il C IDE facendo clic sulla sua icona del programma. Quando si apre, selezionare "File / Nuovo / Progetto" e scegliere "Progetto C" per creare un nuovo progetto C. Un file di codice sorgente vuoto appare nella parte editor di testo dell'IDE.

2 Creare un "struct" denominato "A" con l'allineamento di memoria di default. Scrivi la seguente istruzione nella parte superiore del file di codice sorgente:

struct {} A;

3 Aggiungere alcuni membri di dati per la struct "A." Mescolando tipi interi e caratteri, si sta assicurando che il compilatore pad della struttura. In un sistema a 32 bit, i primi due tipi di dati int ciascuno occupano quattro byte di memoria e sono perfettamente allineati come è. Tuttavia, i due tipi di dati char ciascuno occupano un singolo byte, e insieme occupano due byte di dati. La volontà pad compilatore presente con due byte di dati spazzatura per allineare correttamente i dati. Aggiungere le seguenti istruzioni per struct "A" inserendoli tra le parentesi graffe dopo la parola "struct".

int a;

int b;

char a;

char b;

4 Creare una direttiva del preprocessore che dice di allineare al confine 1 byte, non il limite di 4 byte:

pragma pack (push, 1)

5 Creare un altro struct, questo il nome di "B", e metterlo subito dopo la direttiva del preprocessore scritta nel passaggio precedente.

struct {} B;

6 Riempire struct "B" con gli stessi tipi di dati come struct "A", scrivendo le seguenti istruzioni all'interno delle parentesi graffe di struct "B." Questi tipi di dati si allineano al byte più vicino, che risulta essere 10 (quattro per ogni int, uno per ogni char). Non saranno imbottitura in questa struttura.

int a;

int b;

char a;

char b;

7 Ripristinare l'allineamento al suo difetto scrivendo la seguente dichiarazione:

pragma pack (pop)

Consigli e avvertenze

  • Il vero comportamento di allineamento della struttura dati è molto hardware e C implementazione specifica. Nell'esempio in questo articolo fatta l'ipotesi che i dati allineati sul bordo quattro byte e che il preprocessore C autorizzati questo deve essere modificato attraverso direttive. Questo non è certamente il caso su tutte le macchine con un compilatore C. Prima di regolare l'allineamento struttura dei dati, è necessario comprendere come l'hardware sottostante funziona e che cosa l'implementazione specifica del compilatore C permette.