Я пытался увидеть карту памяти процесса в 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).
Есть ли у кого-нибудь объяснение этому? У меня есть ощущение, что, возможно, сопоставление с защитой только для чтения выполняется загрузчиком для чтения метаданных библиотеки, в то время как часть с правами на выполнение фактически является кодом для библиотеки. Хотя я могу ошибаться.
Но я понятия не имею о среднем ряду. Без разрешения и без обычаев? У кого-нибудь есть мудрые слова?
Я также видел несколько страниц, о которых сообщается, что они находятся в анонимной памяти и не имеют установленного бита режима. Что они обозначают?