Подтвердить что ты не робот

Что такое длинный указатель?

Я читаю книгу и упоминает определенный тип данных как длинный указатель. Просто любопытно, что это значит. Спасибо.

4b9b3361

Ответ 1

Некоторые процессоры имеют два типа указателей, ближайший указатель и дальний указатель. Ближайший указатель уже (поэтому имеет ограниченный диапазон), чем дальний указатель. Дальний указатель может также быть длинным указателем.

Некоторые процессоры предлагают относительную адресацию для вещей поблизости. Длинный указатель может указывать на то, что элемент не близко, а относительная адресация не может быть использована.

В любом случае, длинные указатели являются специфическими для платформы и не могут быть переносимыми для других ОС или платформ.

Изменить: (дальнейшее объяснение и использование относительной адресации)

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

Пример: для системы с 32-разрядной "длинной" адресацией и 8-битной относительной адресацией. Относительное расстояние должно составлять не менее 127 байтов в прямом (положительном значении) или в предыдущем (отрицательном) направлении. Если цель составляет 1024 байта, необходимо использовать полный 32-разрядный указатель.

Это функция оптимизации, основанная на концепции, что большинство инструкций и данных находятся рядом. Большинство петель имеют небольшое расстояние между началом цикла и концом цикла. Они используют относительную адресацию для выполнения.

Большинство данных находятся поблизости, будь то константа данных или переменная. Более подробно данные находятся вблизи кадра или контрольной точки. Локальные переменные помещаются в стек по отношению к кадру или базовому адресу. Этот базовый адрес - это начало стека перед выполнением функции. Таким образом, доступ к данным может осуществляться с помощью адресации по отношению к старту кадра стека.

Процессоры позволяют компиляторам использовать специализированные инструкции для относительной (ближней) адресации. На многих процессорах инструкции по использованию относительной адресации меньше инструкций с использованием длинного адреса. Таким образом, процессор требует меньше выборки из кэша команд, а кеш команд может содержать больше инструкций.

Длинные и короткие, ближние и дальние адресации могут зависеть от объема данных или функции. Существуют и другие факторы, такие как PIC (позиция indepent code), виртуальная память и пейджинг.

Ответ 2

В зависимости от того, сколько лет книга, это может быть ссылка на сегментированные архитектуры, где были два разных "размера" указателя: около указателей, которые указывали на локальный сегмент (и могли быть установлены на 16 бит), и дальние или длинные указатели, которые могли бы указывать на другой сегмент (и, следовательно, были больше). Вот почему вы видите типы, подобные LPVOID в API Win32: LPVOID - это "длинный (дальний) указатель на void", то есть указатель на любую область памяти.

Использование LP и NP - похмелье от Win16 и сегментированных архитектур процессоров того времени. В современных Windows, с его плоскими виртуальными адресными пространствами, приближенные и дальние указатели обычно имеют только археологический интерес: есть только один вид указателя, и вы можете игнорировать "близкие" и "длинные/далекие" квалификаторы.