2012-04-01 18 views
8

Ich benutze die IDE von Code :: Blocks mit dem GNU GCC Compiler.C/C++: Daten in einer Struktur packen oder auffüllen

struct test 
{ 
    char a; 
    char e; 
    char f; 
    char b; 
    char d; 
}; 

sizeof(test) kehrt 5.

las ich diese Antwort: Why isn't sizeof for a struct equal to the sum of sizeof of each member?

Wie kommt es kein Polster nach dem letzten char ist, so dass sizeof(test) kehrt 6 oder 8? Es gibt eine Tonne mehr Fragen, die ich fragen könnte, sobald ich short und int, etc. addiere, aber ich denke, dass diese Frage für jetzt gut ist. Würde das Auffüllen nicht dazu beitragen, dass der Prozessor leichter mit der Struktur arbeiten kann?

Antwort

10

Die Ausrichtung einer char ist nur 1, so dass die Struktur nicht aufgefüllt werden muss, um eine größere Ausrichtungsanforderung zu erfüllen.

+0

OK, sagen wir mal, meine Wortgröße ist 4 Bytes. Nehmen wir an, ich habe ein Array 'test stuff [1000]'. Mein Prozessor liest einzelne 'Test's wie' Char-Char-Char-Char-Char-Pad-Pad-Pad'. Muss das Array im Speicher nicht auch so formatiert werden? – newprogrammer

+0

@newprogrammer Nein. Es wird 5000 Bytes ohne Elemente zwischen Elementen des Arrays von Mitgliedern der Struktur sein. – asaelr

+0

@newprogrammer: Es gibt keine "Wörter" in Ihrer Struktur, so dass die Ausrichtung für ein "Wort" irrelevant ist. –

1

Da Sie meistens mit einem Member zur Zeit arbeiten oder die Adresse der Struktur übergeben, ist es dem Compiler nicht wichtig, die gesamte Struktur mehr auszurichten als die Ausrichtung, die für seine Member benötigt wird. Das heißt, wenn Sie diese Struktur zuweisen (oder sie der Funktion übergeben), muss der Prozessor sie von Element zu Element lesen. (und es wird ein bisschen langsam).

Verwandte Themen