struct member in einer Reihe im Speicher?



  • Hallo,

    ich würde für mein aktuelles Projekt gerne die Eigenschaft benutzen, dass in C++ die Member von struct alle in nacheinander im Speicher stehen. Ich diese also mit memcpy(pointer, target, sizeof(structure)); kopieren kann. Ich will mich hier eigentlich nur nochmal versichern, dass das auch wirklich zum Standard gehört, damit ich später keine böse Überaschung erlebe.

    Wenn struct und class identisch sein sollen in C++ heißt das, dass ich auch class benutzen kann und dann trotzdem noch alle Member in einer Reihe im Speicher stehen?

    MfG
    Scarabol



  • Scarabol schrieb:

    memcpy(pointer, target, sizeof(structure));

    Die Zieladdresse kommt bei memcpy zuerst. Wenn structure ein POD ist, dann darfst Du das so machen.



  • Ob das problemlos geht, hängt auch davon ab, wozu und wohin Du kopieren willst.



  • Die stehen schon hintereinander. Beachte aber was "hintereinander" heißt:

    #include <iostream>
    struct S{
        int i;
        double d;
    };
    
    int main()
    {
        S s[2];
        std::cout << sizeof(int) << std::endl;
        std::cout << sizeof(double) << std::endl;
        std::cout << sizeof(S) << std::endl;
        std::cout << &s[0].i << std::endl;
        std::cout << &s[0].d << std::endl;
        std::cout << &s[1].i << std::endl;
        std::cout << &s[1].d << std::endl;
        return 0;
    }
    
    4
     8
     16
     0012FF40
     0012FF48
     0012FF50
     0012FF58
    

Anmelden zum Antworten