Ausrichtung von C ++ - Datenelementen und Packen von Arrays

Während einer Codeüberprüfung bin ich auf einen Code gestoßen, der eine einfache Struktur wie folgt definiert:

class foo {
   unsigned char a;
   unsigned char b;
   unsigned char c;
}

An anderer Stelle wird ein Array dieser Objekte definiert:

foo listOfFoos[SOME_NUM];

Später werden die Strukturen in einen Puffer kopiert:

memcpy(pBuff,listOfFoos,3*SOME_NUM);

Dieser Code basiert auf den folgenden Annahmen: a.) Die Größe von foo ist 3, und es wird kein Auffüllen angewendet. B.) Ein Array dieser Objekte wird gepackt, ohne dass ein Auffüllen dazwischen erfolgt.

Ich habe es mit GNU auf zwei Plattformen (RedHat 64b, Solaris 9) versucht und es funktionierte auf beiden.

Sind die obigen Annahmen gültig? Wenn nicht, unter welchen Bedingungen (z. B. Änderung des Betriebssystems / Compilers) können sie fehlschlagen?

Antworten auf die Frage(9)

Ihre Antwort auf die Frage