ELF64 / x86_64 и начальный адрес сегмента отображения памяти (для общих объектов)

Я написал несколько программ и обнаружил, что при компиляции в 64-битной среде сегмент отображения памяти (где, например, хранятся общие объекты и общая память) всегда находится где-то около 7f9aca84a000- 7fff88400000, но никогда не бывает одинаковым.

Я хотел бы знать, есть ли фиксированный начальный адрес для этого сегмента памяти в архитектуре x86_64 (ELF64) или каков максимальный и минимальный диапазон для этого сегмента?

Вот почему я задаю этот вопрос. Мы переводим систему с Tru64 UNIX на Linux. Эта система использовала сложное отображение фиксированной памяти совместно используемой памяти IPC Sys V и использует связанный список для перехода от структуры к другой внутри этого сегмента. Учитывая размер и сложность этого фрагмента кода, а также ограниченное время, которое у нас есть под рукой, мы пытаемся найти надежный способ исправить начало общей памяти (эффективно используя shmat с указанным адресом, по которому можно прикрепить сегмент В 64-битном режиме виртуальное адресное пространство настолько велико (фактически возможные адреса - 48 бит), что выбор "безопасного" фиксированного адреса намного проще и менее рискован, чем для 32-битного.

5
задан Huygens 13 October 2011 в 08:07
поделиться