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]