Множество из элементов перечислимого типа
Множество, базовым типом которого есть перечислимый тип, хранится также, как множество, базовым типом которого является тип byte. Однако, в памяти занимает место, которое зависит от количества элементов в перечислимом типе.
Пример:
Type
Video=(MDA,CGA,HGC,EGA,EGAm,VGA,VGAm,SVGA,PGA,XGA);
Var
S : set of Video;
В памяти будет занимать :
ByteSize = (9 div 8)-(0 div 8)+1=2 байта
При этом память для переменной S будет распределена как показано на рис. 3.8.
Рис. 3.8. Распределение памяти для переменной типа set of Video
Если выполнить оператор S:=[CGA,SVGA], содержимое памяти при этом будет:
@S+0 - 10000010
@S+1 - 00000000
Множество от интервального типа
Множество, базовым типом которого есть интервальный тип, хранится также, как множество, базовым типом которого является тип byte. Однако, в памяти занимает место, которое зависит от количества элементов, входящих в объявленный интервал.
Например,
type S=10..17;
var I:set of S;
Это не значит, что первый элемент будет начинаться с 10-того или 0-ого бита, как может показаться на первый взгляд. Как видно из формулы вычисления смещения внутри байта 10 mod 8 = 2, смещение первого элемента множества I начнЯтся со второго бита. И, хотя множество этого интервала свободно могло поместиться в один байт, оно займЯт (17 div 8)-(10 div 8)+1 = 2 байта.
В памяти это множество имеет представление как на рис. 3.9.
Рис. 3.9. Представление переменной типа set of S
Для конструирования множеств интервальный тип самый экономичный, т.к. занимает память в зависимости от заданных границ.
Например, Type S = 510..520;
Var I : S;
begin I:=[512]; end.
Представление в памяти переменной I будет:
@i+0 - 00000000 @i+1 - 00000001
Дата добавления: 2016-07-22; просмотров: 1299;