Alinhamento de Membro de Dados C ++ e Embalagem de Matriz

Durante uma revisão de código, encontrei um código que define uma estrutura simples da seguinte maneira:

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

Em outros lugares, uma matriz desses objetos é definida:

foo listOfFoos[SOME_NUM];

Mais tarde, as estruturas são copiadas em bruto para um buffer:

memcpy(pBuff,listOfFoos,3*SOME_NUM);

Este código se baseia nas suposições de que: a.) O tamanho de foo é 3 e nenhum preenchimento é aplicado e b.) Uma matriz desses objetos é compactada sem preenchimento entre eles.

Eu tentei com o GNU em duas plataformas (RedHat 64b, Solaris 9) e funcionou em ambos.

As suposições acima são válidas? Se não, sob quais condições (por exemplo, mudança no sistema operacional / compilador) eles podem falhar?

questionAnswers(9)

yourAnswerToTheQuestion