Os quatro registros têm permissões diferentes, portanto não podem ser mesclados.
- A
r-xp
entrada descreve um bloco de memória executável ( x
sinalizador de permissão). Esse é o código.
- A
r--p
entrada descreve um bloco de memória que é legível apenas ( r
sinalizador de permissão). São dados estáticos (constantes).
- A
rw-p
entrada descreve um bloco de memória que pode ser gravado ( w
sinalizador de permissão). Isto é para variáveis globais da biblioteca.
- A
---p
entrada descreve um pedaço do espaço de endereço que não tem nenhuma permissão (ou nenhuma memória mapeada para ele).
Todos são privados ( p
sinalizador), o que significa que, se um processo modificar uma página (o que é possível apenas para a parte gravável), essa página será copiada (copiar na gravação) e outros processos não verão nenhuma alteração.
Essa última entrada é uma lacuna entre o segmento de código e o segmento de dados que é inserido explicitamente pelo vinculador GNU sob certas circunstâncias. O objetivo dessa lacuna é garantir que o código (compartilhável entre processos que usam a mesma biblioteca) e os dados graváveis (não compartilháveis) nunca estejam na mesma página. O tamanho da diferença é de 2 MB, porque esse é o maior tamanho de página¹ que o Linux usa em sua arquitetura (amd64). Consulte Qual é o objetivo de mapeamentos de memória aparentemente inutilizáveis no linux? para mais detalhes.
¹ A maioria das páginas tem 4kB, que é o tamanho da página "normal". Mas pode haver páginas que usem menos induções de MMU, o que é um pouco mais rápido, mas gasta muito espaço, a menos que o aplicativo realmente use blocos de memória muito grandes. O Linux chama essas páginas enormes .
Fonte e mais informações para a lacuna não mapeada: Por que o gnome-panel usa 290MB? por RJK. Consulte também a entrada /proc/PID/maps
na documentação do kernel do Linux , Entendendo o Linux / proc / id / maps e / proc / $ pid / maps mostra páginas sem permissões rwx no x86_64 linux no Stack Overflow.