On Monday 02 May 2005 09:18, Victor Wagner wrote: > On 2005.05.01 at 23:25:53 +0300, Dmitry Nezhevenko wrote: > > #include <stdio.h> > > int main(void) > > { > > struct oneRec > > { > > char b1; > > char b2; > > short id; > > char lang; > > char b3[2]; > > char b4[2]; > > > > }; > > > > У меня она выдает: > > sizeof(char)=1 > > sizeof(short)=2 > > sizeof(struct oneRec)=10 > > > > А теперь считаем b1, b2 - по байту, id - 2 байта, lang - 1 байт, b3 = 2 > > байта, b4 = 2 байта. В сумме 9 байт. Но почему sizeof(struct oneRec)=10? > > Ну так выравниване. Скорее всего, положение поля b3 (двухбайтового) > выравнено по четному адресу. Это тебе еще повезло что на выравнивание > ровно один байт ушел. > > struct te { > char c; > int b; > char d; > double x; > }; > > Вот эта штука имеет размер 20 байт Поскольку под Linux ix86 int и double > выравниваются на адрес кратный 4 байтам. > > А на Sparc, где требования к выравниванию по-строже (double должен > размещаться по адресу кратному 8 байтам) аж 24. > > Это нормально, все так живут. Структура - понятие высокоуровневое, и > программиста не должно волновать как именно она размещена в памяти > (потому что на разных процессорах всё равно по-разному ляжет).
Нет, волновать то должно. Просто у меня файл есть (уже есть, созданный не мною). с такой инфой. > > > gcc version 3.3.5 (Debian 1:3.3.5-8) > > > > > > -- > > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > > with a subject of "unsubscribe". Trouble? Contact > > [EMAIL PROTECTED] -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]