Во время обзора кода я столкнулся с некоторым кодом, который определяет простую структуру следующим образом:
class foo {
unsigned char a;
unsigned char b;
unsigned char c;
}
В другом месте определяется массив этих объектов:
foo listOfFoos[SOME_NUM];
Позже структуры скопированы в буфер:
memcpy(pBuff,listOfFoos,3*SOME_NUM);
Этот код основан на предположениях, что: a.) Размер foo равен 3, и никакое дополнение не применяется, и b.) Массив из этих объектов упакован без прокладки между ними.
Я пробовал это с GNU на двух платформах (RedHat 64b, Solaris 9), и он работал на обоих.
Правильны ли предположения? Если нет, при каких условиях (например, изменение в OS/компиляторе) они могут не работать?