Почему адреса виртуальной памяти для Linux файлов начинаются с 0x8048000?

Разборка двоичного файла ELF в системе Ubuntu x86 Я не мог не заметить, что раздел кода (.text) начинается с виртуального адреса 0x8048000, и все более низкие адреса памяти, кажется, не используются.

Это кажется довольно расточительным, и все Google появляется либо фольклор с участием STACK_TOP или защита от нулевых указателей. Последний случай выглядит так, что его можно исправить, используя одну страницу вместо того, чтобы оставить зазор в 128 МБ.

Итак, мой вопрос заключается в том, есть ли окончательный ответ на вопрос, почему макет был привязан к этим значениям или это просто произвольный выбор?

Ответ 1

Из Ссылки и загрузчики:

В 386 системах текстовый базовый адрес равен 0x08048000, что позволяет достаточно большой стек под текстом, оставаясь выше адреса 0x08000000, позволяя большинству программ использовать одну таблицу страниц второго уровня. (Напомним, что на 386 каждая таблица второго уровня отображает адреса 0x00400000.)