2009-07-16 4 views
4

Не зная, что я набрал «far» вместо «var» по моей ошибке. Я заметил, что ключевое слово полужирное, что дает мне мысли о том, что это часть синтаксиса Delphi.Что такое ключевое слово «far» в Delphi?

Кто-нибудь знает что-нибудь о ключевом слове «far»?

ответ

11

Далеко не означает ничего в 32-битных версиях Delphi (Delphi 2 и более поздних). Он использовался в 16-разрядном программировании для указания местоположения сегмента.

Он по-прежнему находится на языке строго для обратной совместимости с очень старым устаревшим кодом.

От старого Delphi 7 файл справки, в разделе «Вызов конвенции»:

«директивы рядом, далеко, и экспорт относятся к призывающих конвенций в 16-битном программировании Windows, они не имеют никакого эффекта в 32-битном. приложений и поддерживаются только для обратной совместимости ».

8

Как пояснил Кен Уайт, он используется только в 16-разрядных приложениях.

Поскольку 16-разрядный указатель может принимать только 64 кбайт памяти, сегменты памяти используются для доступа к большему количеству памяти. Процессор имеет четыре сегментных регистра, так что он может одновременно иметь четыре активных сегмента, сегмент кода (cs), сегмент данных (ds), сегмент стека (ss) и дополнительный сегмент (сегменты). Каждый сегмент составляет 64 kb, но они могут обращаться к одной и той же области памяти или перекрытию стороны.

A ближайший указатель - это 16-разрядный указатель внутри того же сегмента. Он используется как указатель на данные или код в том же модуле.

A дальний указатель - это 16 + 16-разрядный указатель, состоящий из 16-битного смещения сегмента и ближайшего указателя. Он используется как указатель на данные или код в другом модуле. Когда вы используете дальний указатель для вызова процедуры, часть сегмента помещается в регистры cs и ds (IIRC) для доступа к коду и данным в этом модуле.

Физический адрес пары «сегмент + указатель» рассчитывается как указатель сегмента * 16 +. Это означает, что 16-разрядная программа может принимать 1024 кбайт памяти. Чтобы получить доступ к большей памяти, используются два метода расширенной и расширенной памяти. (Также в той или иной степени используется технология высокой памяти, где адрес не обертывается на барьер 1 МБ, но с использованием смещения сегмента FFFF даст вам прямой доступ к 65520 байт расширенной памяти.)

+1

Рядом с указателями не поддерживалось. Ключевое слово Far применимо к процедурам, объявленным в реализации, но которые вы хотели использовать соглашения о выделении вызовов, поэтому, если они были вызваны с помощью указателя, они будут выполнять гораздо отдачу, а не близкую к ней. –

+2

Ключевое слово датируется за пределами Delphi 1, Borland/Turbo Pascal ... – Guffa

1

Он может вернуться. Я слышал ропот тенденции смотреть на PAE со всеми этими процессорами x64, плавающими вокруг. Таким образом, программа может адресовать нормальный лимит памяти 2 или 3 гигабайта (зависит от настройки загрузки ОС), но имеет 48-битный указатель, который может адресовать еще 4 гигабайта. Конечно, у вас должно быть много дешевой физической памяти DDR3. Скажите 24 Gig. Не слишком много программ, которым требуется более 3-х гигабайт. Обмен файлами подкачки означает, что не вся ваша работающая программа все равно находится в памяти. Но, возможно, это данные для сканирования или обработки.

So far может возвращать в качестве 48-битного указателя, чтобы помочь перейти с адреса 32 до 64 бит.

+0

.... – Johan

Смежные вопросы