Как пояснил Кен Уайт, он используется только в 16-разрядных приложениях.
Поскольку 16-разрядный указатель может принимать только 64 кбайт памяти, сегменты памяти используются для доступа к большему количеству памяти. Процессор имеет четыре сегментных регистра, так что он может одновременно иметь четыре активных сегмента, сегмент кода (cs), сегмент данных (ds), сегмент стека (ss) и дополнительный сегмент (сегменты). Каждый сегмент составляет 64 kb, но они могут обращаться к одной и той же области памяти или перекрытию стороны.
A ближайший указатель - это 16-разрядный указатель внутри того же сегмента. Он используется как указатель на данные или код в том же модуле.
A дальний указатель - это 16 + 16-разрядный указатель, состоящий из 16-битного смещения сегмента и ближайшего указателя. Он используется как указатель на данные или код в другом модуле. Когда вы используете дальний указатель для вызова процедуры, часть сегмента помещается в регистры cs и ds (IIRC) для доступа к коду и данным в этом модуле.
Физический адрес пары «сегмент + указатель» рассчитывается как указатель сегмента * 16 +. Это означает, что 16-разрядная программа может принимать 1024 кбайт памяти. Чтобы получить доступ к большей памяти, используются два метода расширенной и расширенной памяти. (Также в той или иной степени используется технология высокой памяти, где адрес не обертывается на барьер 1 МБ, но с использованием смещения сегмента FFFF даст вам прямой доступ к 65520 байт расширенной памяти.)
Рядом с указателями не поддерживалось. Ключевое слово Far применимо к процедурам, объявленным в реализации, но которые вы хотели использовать соглашения о выделении вызовов, поэтому, если они были вызваны с помощью указателя, они будут выполнять гораздо отдачу, а не близкую к ней. –
Ключевое слово датируется за пределами Delphi 1, Borland/Turbo Pascal ... – Guffa