Grundlagenforschung: struct und sizeof



  • Hallo Leute, ich muss mal wieder ein paar Grundlagen nachholen.
    Es geht um die größe eines Struct.

    struct bla{
    	char la[21];
    	int io;
    	char le[21];
    
    	};
    int erg= sizeof( bla);
    int groesse = sizeof (int);
    

    erg ergibt dabei 52 und groesse 4.
    Jetzt hat aber ein int 4 Bytes und ich reserviere 2x ein char Array mit jeweils 21 Bytes = 42.
    42 + 4 ergibt aber 46.
    Warum ist die größe des struct dann 52?

    Lasse ich den int weg, also:

    struct bla{
    	char la[21];
    
    	char le[21];
    
    	};
    int erg= sizeof( bla);
    int groesse = sizeof (int);
    

    Ergibt erg 42 wie es sein soll.

    Warum ergibt das 1. Beispiel 52? WO kommen die 6 Bytes her?

    Danke Mondmann



  • Les Dir mal diesen Artikel durch: Alignment



  • Also macht das oben keinen Sinn, sondern eher:

    struct bla
    {
      char la[24];
      char le[24];
      int io;
    };
    
    int erg     = sizeof(bla);
    int groesse = sizeof(int);
    


  • für den schnelleren Zugriff wird der Speicher in 4 Byte-Blöcke unterteilt. d.h. man reserviert ein Byte, es werden aber trotzdem 32 Bit reserviert. die nächste Variablen kann dann wieder sehr einfach angesprochen und ausgelesen werden.
    Bei Arrays wird zwar nur ein Byte pro char reserviert, das Ende des Arrays wird aber wieder um 4 Byte aufgefüllt.

    Man kann dies über eine Compiler-Option auch Abschalten.



  • ot: bitte setz den leuten keine flausen in den kopf, dass das allignment immer auf 4byte basis geschieht. es ist systemabhängig. will heißen, dass je nach architektur das speichersystems und des prozessors als werte 1 (also kein alignment), 2, 4, 8 oder gar 16byte möglich sind. mehr als 16byte sind auch denkbar, aber zur zeit nach meinem wissen noch in keinem system vorhanden.


Anmelden zum Antworten