Размер типа record

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Размер типа record

Сообщение giao » 14.12.2012 02:03:03

Здравствуйте, форумчане. Возник вопрос с record'ами, точнее с их размером. Объявляю типы и переменные:
Код: Выделить всё
type

  trec1 = record
    ScanType: array[1..4] of Char;
    Nranges: Integer;
    ScanName: array[1..32] of Char;
    comment: array[1..128] of Char;
    DateTime: array[1..20] of Char;
  end;

  trec2 = record
    ScanType: array[1..4] of Char;
    Nranges: Integer;
    ScanName: array[1..32] of Char;
    comment: array[1..128] of Char;
    DateTime: array[1..20] of Char;
    anode: array[1..2] of Char;
  end;

....

var
size1, size2: integer;
x1: trec1;
x2: trec2;

...

size1:= sizeof(x1);
size2:= sizeof(x2);

Почему size1 = 188, a size2 = 192, а не 190? В Delphi7 та же хрень! Ничего не понимаю! :x
giao
новенький
 
Сообщения: 46
Зарегистрирован: 24.11.2009 22:33:18
Откуда: Украина

Re: Размер типа record

Сообщение zub » 14.12.2012 02:28:10

выравнивание, пробуй
Код: Выделить всё
packed record
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Размер типа record

Сообщение stikriz » 14.12.2012 13:32:59

giao писал(а):Почему size1 = 188, a size2 = 192, а не 190? В Delphi7 та же хрень! Ничего не понимаю! :x

Потому, что компилятор для ускорения работы с памятью выравнивает рекорд по слову в зависимости от параметров. Чтобы выравнивал по байту (не выравнивал), как тут уже сказали, packed record.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Размер типа record

Сообщение giao » 14.12.2012 15:50:11

Спасибо, сегодня с утра и сам додумал. Забыл я как-то про выравнивание :)
giao
новенький
 
Сообщения: 46
Зарегистрирован: 24.11.2009 22:33:18
Откуда: Украина


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru