Нашел ответ на свой вопрос: http://wiki.freepascal.org/User_Changes_2.4.0#Alignment_of_record_variables
Если вкратце, то чтобы всегда быть уверенным в размере записи ее необходимо объявить как упакованную (packed). Про опцию {$PackRecords N} можно забыть - в общем случае она не ...
Найдено 3 результата
- 28.07.2010 19:25:56
- Форум: Free Pascal Compiler
- Тема: Выравнивание полей в записи (Record)
- Ответы: 4
- Просмотры: 4647
- 26.07.2010 20:48:28
- Форум: Free Pascal Compiler
- Тема: Выравнивание полей в записи (Record)
- Ответы: 4
- Просмотры: 4647
Re: Выравнивание полей в записи (Record)
>>Brainenjii
Попробовал, результат ожидаемый - все записи имеют минимальный размер (выровнены по границе одного байта);
Как работает выравнивание (если оно вообще работает) так и не понял. Даже простейший пример дает не те результаты, которые я ожидаю:
procedure PackRecordsDemo2;
type ...
Попробовал, результат ожидаемый - все записи имеют минимальный размер (выровнены по границе одного байта);
Как работает выравнивание (если оно вообще работает) так и не понял. Даже простейший пример дает не те результаты, которые я ожидаю:
procedure PackRecordsDemo2;
type ...
- 21.07.2010 21:50:40
- Форум: Free Pascal Compiler
- Тема: Выравнивание полей в записи (Record)
- Ответы: 4
- Просмотры: 4647
Выравнивание полей в записи (Record)
Код из справки (ref) по fpc
Program DemoRecords;
type
{$PackRecords 2}
TRec1 = Record
A : Byte;
B : Word;
end;
{$PackRecords 1}
TRec2 = Record
A : Byte;
B : Word;
end;
{$PackRecords 2}
TRec3 = Record
A,B : Byte;
end;
{$PackRecords 1}
TRec4 = Record
A,B : ...
Program DemoRecords;
type
{$PackRecords 2}
TRec1 = Record
A : Byte;
B : Word;
end;
{$PackRecords 1}
TRec2 = Record
A : Byte;
B : Word;
end;
{$PackRecords 2}
TRec3 = Record
A,B : Byte;
end;
{$PackRecords 1}
TRec4 = Record
A,B : ...
