По GCC (GCC 3.4.4) на примере CW1.5 с дефолтными опциями ПЕРВОЕ
sizeof(float) - 4
sizeof(double) - 8
sizeof(long double) - 8
ВТОРОЕ
В GCC вообще #pragma pack() есть, НО!
на #pragma pack(push, 1) получаем варнинг:
#pragma pack(push[, id], ) is not supported on this target
на #pragma pack(1) варнинга нет, но похоже он не пашет! :(
struct A
{
uchar u1;
uchar u2;
uchar u3;
uchar u4;
};
#pragma pack(1)
struct B
{
uchar u1;
uchar u2;
uchar u3;
uchar u4;
};
sizeof(struct A) - 4
sizeof(struct B) - 4
Тут ничего необычного ибо пример исходный такой :)
Изменяем структуру
#pragma pack(1)
struct C
{
uchar u;
int i;
};
struct D
{
struct C a[5];
int i;
};
sizeof(struct C) - 8
sizeof(struct D) - 44
Оба! От #pragma pack(1) ожидается совсем другое!
В общем после всего этого я пользовался
__attribute__ ((__packed__))
struct __attribute__ ((__packed__)) C
{
uchar u;
int i;
};
struct __attribute__ ((__packed__)) D
{
struct C a[5];
int i;
};
sizeof(struct C) - 5
sizeof(struct D) - 29
Видимо можно ещё и __attribute__ ((aligned (X))) совместно с pack пользовать