Byteanordnung eines Structs bzw. eines Arrays



  • Hallo!

    Ich hab in der Suche nichts dazu gefunden.
    Also, kann jemand sagen, ob grundsätzlich
    die folgenden beiden Variablen im Speicher
    gleich aussehen würden?

    struct Struktur
    {
     int a;
     int b;
     int c;
     int d;
    }
    
    Struktur werte;
    

    und

    int werte[4];
    

    Das heißt konkret, kann ich davon ausgehen, dass bei beiden Varianten die Werte a,b,c und d direkt hintereinander im Speicher liegen?

    Danke im Voraus!



  • ja, kannst du.



  • dazu hab ich auch mal ne frage:

    Wenn ich bsp. ein Objektarray habe, welche allerding nur die Pointer der Objekt enthält, und dann dynamisch Objetk mit new erzeuge und die refernez im array anfüge, sind die objekt ja chaosmässig im speicher veteilt. Würd ich nun irgendwoe erreich da sdie objek andeinander im speicher liegen, wäre dann der zugriff beim travesieren schneller?



  • Nicht wirklich - du mußt immer aus deinem Array den Zeiger raussuchen und zu deinem Zielobjekt verfolgen, da ist es letzlich egal, in welcher Reihenfolge die Objekte abgelegt werden. Schneller wird's höchstens, wenn du die Objekte direkt in dein Array unterbringst.



  • @OP:
    Beim Array hast du tatsächlich die Garantie. Beim struct: Sofern es ein POD ist (und nur dann), hast du die Garantie, dass die Anfangsadresse des struct's der Adresse vom Member a entspricht - mehr nicht. Ansonsten ist es dem Compiler freigestellt, Paddingbytes einzufügen. Lässt sich z.B. über Compilerschalter regeln. Grundregel - versuch nie Objekte zu durchleuchten. Das schießt dir früher oder später in den Fuß.



  • Danke für die Antworten!



  • müsste aber mit dem deubel einhergehen, wenn der compiler dir bei nem reinen int-struct padding bits dazwischenknallt.



  • Das ist die einzige Garantie, die der Sprachstandard hergibt. Padding kannst du über Compilerschalter erzwingen.
    Sprich vermutlich sind meist keine dazwischen - aber eine unumstößliche Garantie dafür gibt es eben genau nicht.


Anmelden zum Antworten