Четыре записи имеют разные разрешения, поэтому их нельзя объединить.
r-xp
Запись описывает блок памяти исполняемого ( x
флаг разрешения). Это код.
r--p
Запись описывает блок памяти , который доступен только для чтения ( r
флаг разрешения). Это статические данные (константы).
rw-p
Запись описывает блок памяти , который доступен для записи ( w
флаг разрешения). Это для глобальных переменных библиотеки.
---p
Запись описывает кусок адресного пространства , который не имеет каких - либо разрешений (или любую память , отображенный на него).
Все они являются частными ( p
флаг), это означает, что если процесс изменяет страницу (что возможно только для записываемой части), эта страница будет скопирована (копирование при записи), и другие процессы не увидят никаких изменений.
Эта последняя запись представляет собой разрыв между сегментом кода и сегментом данных, который явно вставляется компоновщиком GNU при определенных обстоятельствах. Цель этого разрыва заключается в том, чтобы гарантировать, что код (общий для процессов, использующих одну и ту же библиотеку) и доступные для записи данные (не для общего доступа) никогда не находятся на одной странице. Размер разрыва составляет 2 МБ, потому что это самый большой размер страницы¹, который Linux использует в вашей архитектуре (amd64). См. Какова цель на первый взгляд непригодных отображений памяти в Linux? Больше подробностей.
¹ Большинство страниц имеют размер 4 КБ, что является «нормальным» размером страницы. Но могут быть страницы, которые используют меньше косвенных обращений MMU, что немного быстрее, но тратит много места, если приложение фактически не использует очень большие блоки памяти. Linux называет эти огромные страницы .
Источник и дополнительная информация для неиспользованного разрыва: почему панель gnome использует 290 МБ? по RJK. Смотрите также запись для /proc/PID/maps
в документации ядра Linux , Понимание Linux / ргос / ID / карты и / Proc / $ PID / Картах страницы без RWX разрешений на x86_64 Linux на переполнение стека.