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