Durante una revisione del codice che ho incontrato un po 'di codice che definisce una struttura semplice come segue:C++ dei dati Gli Allineamento e Array Imballo
class foo {
unsigned char a;
unsigned char b;
unsigned char c;
}
Altrove, una matrice di questi oggetti è definito:
foo listOfFoos[SOME_NUM];
Successivamente, le strutture sono prime copiati in un buffer:
memcpy(pBuff,listOfFoos,3*SOME_NUM);
Questo codice si basa sul assumpti ons that: a.) La dimensione di foo è 3, e nessuna padding è applicata, e b.) Una matrice di questi oggetti è imballata senza padding tra di loro.
L'ho provato con GNU su due piattaforme (RedHat 64b, Solaris 9) e ha funzionato su entrambi.
Le ipotesi sopra sono valide? In caso contrario, a quali condizioni (ad es. Cambiare OS/compilatore) potrebbero non riuscire?
E qualcuno ha inventato std: vector ... –
@Matthieu: Grazie per averci ricordato. Sono sicuro che il PO l'aveva ignorato. – nus