Страница 1 из 1

Размер типа record

СообщениеДобавлено: 14.12.2012 02:03:03
giao
Здравствуйте, форумчане. Возник вопрос с 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

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

СообщениеДобавлено: 14.12.2012 02:28:10
zub
выравнивание, пробуй
Код: Выделить всё
packed record

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

СообщениеДобавлено: 14.12.2012 13:32:59
stikriz
giao писал(а):Почему size1 = 188, a size2 = 192, а не 190? В Delphi7 та же хрень! Ничего не понимаю! :x

Потому, что компилятор для ускорения работы с памятью выравнивает рекорд по слову в зависимости от параметров. Чтобы выравнивал по байту (не выравнивал), как тут уже сказали, packed record.

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

СообщениеДобавлено: 14.12.2012 15:50:11
giao
Спасибо, сегодня с утра и сам додумал. Забыл я как-то про выравнивание :)