Memoria del computer di solito è allineato a un limite di dimensioni uguali alla dimensione della parola di sistema . Su un ipotetico sistema a 32 bit , immaginate che questa dimensione della parola è lunga quattro byte . Nel linguaggio C , è possibile creare strutture che memorizzano i dati . Al fine di allinearli alla dimensione della parola , il compilatore C può aggiungere imbottitura alla struttura . È possibile rimuovere questa imbottitura utilizzando una direttiva del preprocessore che dice di allineare i dati in modo diverso . Cose che ti serviranno
C Ambiente di sviluppo integrato , come ad esempio Eclipse CDT
C Compiler , un tale GCC
Show More Istruzioni
1
Caricare il C IDE cliccando sulla relativa 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 di vuoto viene visualizzata nell'editor di testo parte dell'IDE.
2
creare una " struttura " di nome " A" con l'allineamento di memoria di default . Scrivi la seguente istruzione all'inizio del file di codice sorgente :
struct { } A;
3
Aggiungi alcuni membri dati per la struct "A. " Con l' intero missaggio e tipi di carattere , si sta assicurando che il compilatore riempimenti alla struttura . Su un sistema a 32 bit , i primi due tipi di dati int ciascuna occupano quattro byte di memoria e sono perfettamente allineati come è. Tuttavia, i due tipi di dati char occupano ciascuna un singolo byte , e insieme occupano due byte di dati . Il compilatore pad presente con due byte di dati spazzatura per allineare i dati in modo corretto. Aggiungere le seguenti dichiarazioni a struct " A" inserendoli tra le parentesi graffe dopo la parola
int a "struct ". ;
Int b ;
char a ;
char b ;
4
Creare una direttiva per il preprocessore che dice di allineare al limite di 1 byte , non il limite di 4 byte :
# pragma confezione (push , 1 ) economici 5
Creare un'altra struct , questo il nome di " B ", e metterlo subito dopo la direttiva del preprocessore scritto nel passaggio precedente .
struct { } B ;
6
Fill struct " B ", con gli stessi tipi di dati come struct "A ", scrivendo le seguenti dichiarazioni all'interno della 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 carattere) . Non ci sarà nessun imbottitura in questa struttura
int a; .
Int b ;
char a ;
char b ;
< br > 7
Ripristina l'allineamento al suo valore predefinito , scrivendo la seguente dichiarazione :
# pragma pack ( pop ) per