![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Размер множества
Германн © (2006-10-23 16:01:00)То ли я совсем тупой, то ли...
Есть следущие типы:
TPin = (A1,B1,C1,A2,B2,C2,A3,B3,C3,A4,B4,C4,A5,B5,C5,A6,B6,C6,None);
TPinSet = Set of TPin;
Я работал в полной уверенности, чтоSizeOf(TPinSet) = 3. А глянул в Evaluate/Modify, он показывает, что размер = 4. Ну откуда 4? Во множестве всего 19 бит?
Loginov Dmitry (2006-10-23 23:28:00) [1]Германн © (23.10.06 16:01)
Я работал в полной уверенности, что SizeOf(TPinSet) = 3
Хорошо, не 3.5
%)))
Германн (2006-10-23 22:37:00) [2]Да нет. Директива $Z не имеет никакого отношения к размеру множества.
Эксперименты показали, что компиллятор просто ненавидит размер множества = 3. И добавляет к необходимым 3-м байтам множества четёртый нулевой. Любой другой размер 1,2,4,5,6,7 и т.д. считается нормальным. Наверно в какой-нибудь умной книжке и объяснено чем 3 хуже прочих, но мне искать лень. Просто запомню на будущее.
Ketmar (2006-10-23 18:01:00) [3]$Z задаёт размер по-умолчанию.
default (2006-10-23 17:08:00) [4]по-моему выравнивание тут не причём
а лишь причём разрядность процессора
что с изменением выравнивания что-то меняется?
Anatoly Podgoretsky (2006-10-23 16:49:00) [5]
> не понял причём тут директива $Z, относящаяся
Определяет выравнивание, величина по умолчанию зависит от версии Дельфи
Германн (2006-10-23 16:46:00) [6]Проблему решил, но так и не понял причём тут директива $Z, относящаяся к enumerated type и множества. Ладно, вечером буду читать и экспериментировать. Сейчас поеду ставить программу на объект.
default (2006-10-23 16:26:00) [7]TPinSet даст пять байт...ну короче понятно и так думаю...
default (2006-10-23 16:25:00) [8]короче говоря на низком уровне команды обслуживающие множества работают с 32-разрядными операднами
default (2006-10-23 16:24:00) [9]TPin = (A1, A2, A3, A4, A5, A6, A7, A8,
A9, A10, A11, A12, A13, A14, A15, A16,
A17, A18, A19, A20, A21, A22, A23, A24,
A25, A26, A27, A28, A29, A30, A31, A32,
A33, A34, A35, A36, A37, A38, A39, A40);
даст пять байт
и не более
команда включения элемента во множество работает с 32-разрядными операндами в 32 оси
делов
Ketmar (2006-10-23 16:05:00) [10]оттуда, что с LongWord работать проще. при $Z1 и восьми битах будет байт. при $Z2 и восьми битах будет слово. при $Z4 и восьми битах будет двойное слово.
для 16 бит -- слово, слово, двойное слово.
если бит больше 16 -- двойное слово, двойное слово, двойное слово.
Dmitrij_K (2006-10-23 16:04:00) [11]выравнивание ?