2009-11-30 2 views
0

Рассмотрите this , потому что эта область отображает файлы, такие как динамически загружаемые библиотеки, я чувствую, что она должна идеально расти. это можно реализовать, запустив область mmap между RLIMIT_STACK и началом кучи. какие проблемы возникнут в этом случае.Почему область памяти, скопированная в Linux, уменьшилась в Linux

Если он растет, то как создается новая область отображения памяти. предположим, что мы хотим сопоставить код для abc.so в виртуальном адресном пространстве, тогда нам нужно будет создать пространство sizeof (abc.so) в нисходящем направлении и файл карты, начинающийся в нижней части этой области. это как это работает?

ответ

1

Вы уверены, что не путаете «вверх» на диаграмме с «вверх» в смысле увеличения адресов? Обратите внимание, что диаграмма имеет низкий адрес в верхней части [Edit: Нет, на самом деле, у него низкий адрес внизу, мой плохой].

Отображаемая область растет в сторону нижних адресов. Почему у вас чувствую, что он должен расти в другом направлении? Если сопоставленные файлы и куча начинаются в противоположных направлениях адресного пространства и растут друг к другу, вы максимизируете использование адресного пространства до того, как области столкнутся.

При отображении файла вы просто сопоставляете смежный диапазон адресов , который будет подкреплен файлом (от низких до высоких адресов, что вы ожидаете от ). При доступе к странице произойдет ошибка страницы, и содержимое файла будет скопировано в кадр страницы памяти.

+0

Я уверен, что адрес 0 находится внизу этой диаграммы. –

+0

справа, а также стек растет в нисходящем направлении, то есть к нижним адресам. –

+0

Они глаза - это первое, что ты ослепляешь ... Извини. В любом случае, это довольно произвольно, так как кучи и регионов с отображенными файлами растут с тех пор, как они выделены в блоках. –

Смежные вопросы