Консультация № 70315
10.01.2007, 17:29
0.00 руб.
0 3 3
Здравствуйте, уважаемые эксперты.
Философский вопрос, а что значит буква "L" в LPVOID, LPCSTR и прочих? Ведь можно и PVOID создавать и вроде нет разницы. В чем смысл этой "L"? =)

Обсуждение

Неизвестный
10.01.2007, 17:39
общий
это ответ
Здравствуйте, Palpatin!

L - long

Исторически сложилось. Когда были 16-битные машинки это означало
LPVOID = 32 bit
а
PVOID = 16 bit

На данный момент вроде нет разницы

LPVOID = PVOID = void*
Неизвестный
10.01.2007, 17:50
общий
это ответ
Здравствуйте, Palpatin!
Это историческое наследие:
На 16-битных системах были такие понятия как ближний указатель и дальний (far или long)
Дальний состоял из двух 16-битных значений - адрес и смещение в блоке,
а ближний - просто смещение, которое определяло положение области памяти в адресном пространстве программы (тогда программы без дополнительных телодвижений использовали адресное пространство памяти размером 2^16 байт (65535), для использования большей памяти требовались менеджеры памяти, которые умели адресовать ее блоками по 65к)
Теперь все указатели 32-битные и в таком делении отпала необходимость, но обозначения остались(можно сказать для совместимости)
Неизвестный
10.01.2007, 19:19
общий
это ответ
L означает Long, и досталась в наследие от 16-битных операционных систем, где были разные модели памяти, ограничение на объём одного объекта в 64Кб и прочие ужасы. Указатель разделялись на near и far (т.е. long).

Сейчас (в 32-битных системах) все указатели Long, так что разницы действительно нет.
Форма ответа