Это зависит от платформы.В Mac OS X первые 4 ГБ адресного пространства 64-битного процесса зарезервированы и не отображаются, предположительно в качестве функции безопасности, поэтому нет 32-битное значение всегда ошибочно дляуказательЕсли вы попытаетесь, возможно, есть способ победить это.Однажды я обошел его, написав класс C ++ «указатель», который добавляет 0x100000000 к сохраненному значению.(Это было значительно быстрее, чем индексирование в массив, что также требует поиска базового адреса массива и умножения перед добавлением.)
На уровне ISA вы, безусловно, можете выбрать загрузку и расширение нуля 32.-bit значение, а затем использовать его в качестве 64-битного указателя.Это хорошая возможность для платформы.
Никаких изменений в программе не требуется, если вы не хотите использовать 64-битные и 32-битные указатели одновременно.В этом случае вы возвращаетесь к плохим старым временам с указателями near
и far
.
Кроме того, вы наверняка нарушите совместимость ABI с API, которые переводят указатели на указатели.