phantom-84 писал(а):
Я уже говорил, что речь идет о гибкости в плане изменения размеров прикладного пространства и пространства ядра. Большинству приложений, привязанных к младшим адресам, пофиг, каков размер прикладного пространства, но они могут спокойно пользоваться бонусами большего, чем обычно, прикладного пространства, когда оно доступно. Также они могут "кое-как существовать" в меньшем или обычном в плане размера пространстве. При этом не нужна ни релокация, ни перекомпиляция исполняемых модулей.
Если специально (ну или по дурости) не создавать проблем, приложению абсолютно без разницы, по каким адресам оно располагается, и нет проблем с расширением адресного пространства. В частности, корректно написанное приложение просто обязано работать, используя любые канонические адреса, обеспечиваемые процессором и системой.
Адрес в 64-разрядном режиме, насколько помню, есть смысл рассматривать как число со знаком в диапазоне от -2**n до 2**n-1, где n -- число аппаратно реализованных битов адреса (не помню, сколько сейчас -- 40?). Если размещать приложение в младших адресах, это означает, что оно строится с адреса 0 или около него (обычно нулевую страницу исключают для ловли нулевых указателей, но в данном случае это не важно). Соответственно, приложение сначала занимает некую область адресов от 0 до какого-то положительного адреса, а впоследствии может быть расширено вплоть до 2**n-1.
Если размещать приложение в старших адресах, то резонно в качестве базового адреса при его построении брать -2**n. В этом случае приложение изначально займёт какие-то наименьшие адреса в старшей половине памяти (численно эти адреса будут минимальными вообще, если их рассматривать как числа со знаком). Впоследствии оно без проблем может "дорасти" до нуля -- т.е. получить ровно тот же объём памяти, что при размещении его в нижних адресах (и даже больший на размер страницы, учитывая, что нулевой адрес обычно запрещён). Все алгоритмы, связанные с выделением и освобождением памяти, отображением виртуальных адресов на физические и т.д. остаются абсолютно неизменными.
Таким образом, абсолютно никакой принципиальной разницы в том, где в виртуальных адресах располагать ядро, а где -- прикладной код, нет.