Выравнивание элементов данных 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), и это работало на обеих.

Допустимы ли приведенные выше предположения? Если нет, то при каких условиях (например, изменение в ОС / компиляторе) они могут потерпеть неудачу?

Ответы на вопрос(9)

Ваш ответ на вопрос