![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
3=4 sizeof? [D5, XP]
Petroff-1 © (2013-08-26 01:53:00)Объявлена запись в 3 байта, а sizeof показывает 4, кому верить?
TRes = record
ccs:byte;
doc:word;
end;
pp:TRes;
showmessage(intToStr(sizeof(pp))); // =4!
В результате при использовании F: File of TRes; файл больше за счёт каждого лишнего байта в записи Write(F,pp);
Что делать как заставить писать 3 байта в файле, числом не кратным двойке, отключив запись мусорного выравнивания чётности sizeof?
Petroff-1 (2013-08-26 02:27:00) [1]Спасибо большое, работает!!!
Скорость не важна, главное размер и истинные данные подряд
Германн (2013-08-26 02:21:00) [2]Но выиграв в размере, проиграешь в скорости.
Германн (2013-08-26 02:19:00) [3]
> Petroff-1 (26.08.13 02:13) [2]
>
> а три никак не сделать?
Запросто:
TRes = packed record
ccs:byte;
doc:word;
end;
Подробности тут: http://docwiki.embarcadero.com/RADStudio/XE3/en/Structured_Types
Petroff-1 (2013-08-26 02:13:00) [4]а три никак не сделать? Это влияет на считывание, лишнее не хочется в файл тащить.
Или записывать кусочками - byte, word, без типов?
Германн (2013-08-26 02:08:00) [5]
> Объявлена запись в 3 байта, а sizeof показывает 4, кому
> верить?
Верить sizeof. А 3 это только вам кажется.