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?