Я пытался увидеть карту памяти процесса в Linux x86-64 с помощью команды pmap -x
. Я запутался, глядя на вывод pmap. Особенно для записей для отображения динамических библиотек. Для них есть несколько записей (фактически 4 для всех большинства из них, причем некоторые имеют 3 записи). Ниже приведен пример
Address Kbytes RSS Dirty Mode Mapping
00000036ca200000 88 64 0 r-x-- libpthread-2.5.so
00000036ca216000 2044 0 0 ----- libpthread-2.5.so
00000036ca415000 4 4 4 r---- libpthread-2.5.so
00000036ca416000 4 4 4 rw--- libpthread-2.5.so
Вторая строка для каждой библиотеки всегда имеет размер 2 МБ, хотя у нее нет разрешения для страницы. Кажется, что во всех библиотеках его RSS ВСЕГДА ноль. Последние две строки также имеют одинаковый размер (базовый размер страницы) и одинаковые разрешения (несколько библиотек не имеют сопоставления rw).
У кого-нибудь есть объяснение этому? У меня есть ощущение, что, возможно, отображение с защитой только для чтения выполняется загрузчиком для чтения метаданных библиотеки, тогда как часть с исполняемым разрешением фактически является кодом для библиотеки. Хотя я могу ошибаться.
Но я понятия не имею об этом среднем ряду. Нет разрешения и нет использования? У кого-нибудь есть здесь слова мудрости?
Я также видел несколько страниц, о которых сообщалось, что они находятся в анонимной памяти и не имеют установленного бита режима. Что они представляют?