Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Тип в байты, разметка


Автор: uranpro 19.1.2010, 17:46
Добрый день!
есть тип
Код

  TMyType = record
    ProID:integer;
    Command: string[30];
    pFrom : string[30];
    Msg:string[255];
    end;

сколько байт занимает каждое поле ?
delphi 7, кодировка по умолчанию.

ProID - 4б

Автор: ~FoX~ 19.1.2010, 18:20
SizeOf
31, 31 и 256

Автор: uranpro 19.1.2010, 18:37
спс
 smile 

Автор: uranpro 20.1.2010, 11:27
?
4 + 31 + 31 + 256 = 322
sizeof(TMyType) = 324

322 <> 324

как так ?

Автор: uranpro 20.1.2010, 18:09
ап, очень надо!

Автор: ~FoX~ 20.1.2010, 18:38
uranpro, потому что в структуре все дынные должны быть кратны 2, 4, 8 байтам, Если данные занимают меньше 4 байто, то они дополнятются... Но если их упаковать, то все будет ровно...

Код

 TMyType = Packed record
    ProID:integer;
    Command: string[30];
    pFrom : string[30];
    Msg:string[255];
    end;

Вернет 322

Цитата

------------------------------------------------------------
Q-27:  Почему у меня record a : word; b : longint end; имеет размер восемь
байт вместо шести?
------------------------------------------------------------
Если не использовать ключевое слово packed, то Дельфи производит
выравнивание структуры на определенную границу. В разных версиях Дельфи по
разному.

Для того что избежать этого, надо описать структуру следующим образом:

aRec = packed record
  a : Word;
  b : LongInt;
end;

Также не стоит использовать фундаментальные типы, так как их размерность
зависит от версии Дельфи.



Автор: uranpro 20.1.2010, 18:45
спасибо большое! 
получается, что у меня Command и pFrom весят по 32 байта ?
 smile 

Автор: ~FoX~ 20.1.2010, 23:11
uranpro, Ну как бы не совсем....

SizeOf(MyType.Command) все равно вернет 31, но в структуре не используемый байт будет дополнен.... 

Теоретически это должно оптимизировать работу с память... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)