Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Размер множества


Германн ©   (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]

выравнивание ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо