Язык программирования Си для персонального компьютера | страница 36
Указатель типа huge — 32-битовый; он также содержит адрес сегмента и смещение. Значение указателя типа huge может быть изменено в пределах всего 1-мегабайтного адресного пространства. В СП ТС указатель типа huge всегда хранится в нормализованном формате. Это имеет следующие следствия:
—операции отношения ==, !=, <, >, <=, >= выполняются корректно и предсказуемо над указателями типа huge, но не над указателями типа far;
—при использовании указателей типа huge требуется дополнительное время, т. к. программы нормализации должны вызываться при выполнении любой арифметической операции над этими указателями. Объем кода программы также возрастает.
В СП MSC модификатор huge применяется только к массивам, размер которых превышает 64 К. В СП ТС недопустимы массивы больше 64 К, а модификатор huge применяется к функциям и указателям для спецификации того, что адрес функции или указуемого объекта имеет тип huge.
Для вызова функции типа near используются машинные инструкции ближнего вызова, для типов far и huge — дальнего.
Примеры.
/* пример 1 */
int huge database [65000];
/* пример 2 */
char fаг *x;
/* пример 3 */
double near cdecl calc(double, double);
double cdecl near calc(double, double);
/* пример 4 */
char far pascal initlist[INITSIZE];
char far nextchar, far *prevchar, far *currentchar;
В первом примере объявляется массив с именем database, содержащий 65000 элементов типа int. Поскольку размер массива превышает 64 Кбайта, его описатель должен быть модифицирован специальным ключевым словом huge.
Во втором примере специальное ключевое слово far модифицирует расположенную справа от него звездочку, делая х указателем на far указатель на значение типа char. Это объявление можно для ясности записать и так:
char *(far *х);
В примере 3 показано два эквивалентных объявления. В них объявляется calc как функция с модификаторами near и cdecl.
В примере 4 также представлены два объявления. Первое объявляет массив типа char с именем initiist и модификаторами far и pascal. Модификатор pascal указывает на то, что имя данного массива используется не только в программе на языке Си, но и в программе на языке Паскаль (или другом языке программирования с подобными правилами написания имен внешних переменных). Модификатор far указывает на то, что для доступа к элементам массива долины использоваться 32-битовые адреса.
Второе объявление объявляет три указателя на far значения типа char с именами nextchar, prevchar