Struktur größer als Inhalt?



  • Hi,

    mir ist eben etwas sehr interessantes aufgefallen wo ich absolut keinen Peil sehe, warum das so ist.

    Also: Ich habe eine Struktur mit dem Namen 'item'. In ihr sind zwei char-Arrays der Breite von 13 und 9, und ein long (Größe 4 Byte).

    Das ergibt bei meinem Kopfrechnen eine größe von 26 Byte. Denkste!

    Hab ein Programm geschrieben um mich selbst zu überzeugen und versteh den Sinn dahinter nicht 😞

    #include <iostream>
    
    struct item
    {
        char name[13];
        long size;
        char buffer[9];
    };
    
    #define showSize(x) std::cout << #x << " : " << sizeof(x) << std::endl;
    
    int main (void)
    {
        item temp;
    
        showSize(temp.name);
        showSize(temp.size);
        showSize(temp.buffer);
    
        std::cout << "Total: " << sizeof(temp.name) +
                                  sizeof(temp.size) +
                                  sizeof(temp.buffer) << std::endl << std::endl;
    
        std::cout << "---" << std::endl;
    
        showSize(item);
        showSize(temp);
    
        std::cin.get ();
    
        return 0;
    }
    

    Ausgabe:
    temp.name : 13
    temp.size : 4
    temp.buffer : 9
    Total: 26
    ---
    item : 32
    temp : 32

    WARUM ist die Struktur nicht 26 groß sondern 32?? Und wie kann ich es hinbekommen das die Struktur 26 Byte groß ist?

    p.s.: Ich benutze Visual C++ Express



  • Damit der Prozessor schneller auf die Elemente zugreifen kann.



  • hmmmmmmmmmmm schrieb:

    Damit der Prozessor schneller auf die Elemente zugreifen kann.

    Reseviert er 6 Byte für??



  • struct item
    {
        char name[13]; // <- 16
        long size; // <- 4 
        char buffer[9]; // <- 12
    };
    


  • Schau mal nach dem Stichwort "Alignment" in der ForumSuche/Google in dem zusammenhang. Danach kann z.B. ein char nicht ein byte beanspruchen, sondern plötlich 4, damit der prozessor auf die folgende variable schneller zugreifen kann... 🙂



  • @OnlyFoo-Silvester
    kann man denn die struktur auf diese größe ausrichten? mir geht es ja nicht um speed 😞



  • Nicht mit Standard C++ sondern mit Compiler-Optionen oder speziellen Anweisungen.



  • Kannst in den Einstellungen normalerweise das Alignment deaktivieren.


Anmelden zum Antworten