Dmitry Nezhevenko -> debian-russian@lists.debian.org @ Tue, 3 May 2005 00:12:21 +0300:
>> > #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. >> >> Это нормально, все так живут. Структура - понятие высокоуровневое, и >> программиста не должно волновать как именно она размещена в памяти >> (потому что на разных процессорах всё равно по-разному ляжет). DN> Нет, волновать то должно. Просто у меня файл есть (уже есть, созданный не DN> мною). с такой инфой. Так читают файлы read'ом прямо в структуру только особо продвинутые герои, которым нечего терять. Остальные читают поэлементно. -- Artem Chuprina RFC2822: <ran{}ran.pp.ru> Jabber: [EMAIL PROTECTED] Обладаю смехотворными способностями. Кнышев -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]