Выравнивание элементов данных C ++ и упаковка массивов
Во время обзора кода я наткнулся на некоторый код, который определяет простую структуру следующим образом:
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), и он работал на обеих.
Допустимы ли приведенные выше предположения? Если нет, то при каких условиях (например, изменение в ОС / компиляторе) они могут потерпеть неудачу?