На первом рисунке в виртуальном адресном пространстве есть три пробела.Дыра в 0 есть, потому что это полезно;В программных ошибках часто случайно используется маленькое целое число в качестве адреса, поэтому, если адрес не отображается в адресном пространстве, аппаратное обеспечение MMU может его обнаружить.
Дыра в конце состоит в том, что мы не использовали все адресное пространство!
Дыра перед общей библиотекой может быть по нескольким причинам.На многих архитектурах библиотеки имеют «предпочтительный» адрес для загрузки по адресу;размещение их в другом месте требует работы по переносу и, возможно, нескольких не используемых страниц.Расположение их «произвольно» делает некоторые хаки несколько сложнее, чем если бы во всех системах была библиотека X по предсказуемому адресу.И, наконец, вы забыли о куче - области динамически распределенной памяти, часто размещаемой после данных, выделенных объектным файлом.
На второй диаграмме «нераспределенные страницы ВМ», по-видимому, означают пространство, для которогов таблицах страниц ничего нет«Нераспределенные страницы» имеют записи в таблицах страниц, поэтому в некотором смысле они немного ближе к существующим.Я не уверен, что автор хочет сделать, хотя.Это не очень важно для самой исполняемой программы.
Относительно того, почему адресное пространство не сжимается: оно ничего не получает.Недостаточным ресурсом является реальная память, а не (обычно) сжатое адресное пространство.Положительным преимуществом является возможность сознательно иметь дыры, чтобы данные могли расширяться при необходимости.