Я пытаюсь понять реализацию сегментов процесса в 64-разрядных архитектурах. Я наткнулся на эти 2 обсуждения:Сегментация в 64-разрядных процессорах Intel (и не Intel)
64 bit application: layout in memory
Process segments(stack,heap,data and code) are contiguous in memory?
Однако я до сих пор неясно. Сегментация была введена для преодоления ограничений использования 64-Кбайтной памяти с 16-разрядными адресами в Intel 80286/80386. После этого 32-разрядные компьютеры Intel по-прежнему продолжали его по соображениям совместимости.
Теперь перейдем на 64-разрядный: в руководствах говорится, что сегментация редко реализуется здесь (ref: http://en.wikipedia.org/wiki/X86_memory_segmentation). Виртуальная память и пейджинг могут обеспечить доступ ко всему адресному пространству вместе с защитой.
Так что мой вопрос: как 64-разрядная программа скомпилирована 64-битными компиляторами? По-прежнему ли они используют концепцию «сегментов» (потому что я все еще вижу упоминания сегмента данных, сегмента стека и т. Д.), Как и раньше, но с более высокими указателями сегмента бит # бит? Или слово «сегмент» относится к чему-то совершенно другому для 64-битных архитектур?
Любая помощь приветствуется.
Я не перечитывал ссылки, которые вы предоставили, но если я правильно помню, это основное различие между компиляцией/запуском вашего кода в режиме реального режима или режиме защиты. Если вы специально не настроитесь на использование режима защиты, вы по умолчанию используете «реальный режим» со всеми традиционными ограничениями. –
Уверен, но сегментация ортогональна реальному и защищенному режиму правильно? –