Os quatro registros têm permissões diferentes, portanto não podem ser mesclados.
- A entrada
r-xp
descreve um bloco de memória executável (x
sinalizador de permissão). Esse é o código. - A entrada
r--p
descreve um bloco de memória que só é legível (r
sinalizador de permissão). São dados estáticos (constantes). - A entrada
rw-p
descreve um bloco de memória gravável (w
sinalizador de permissão). Isto é para variáveis globais da biblioteca. - A entrada
---p
descreve uma parte do espaço de endereço que não possui permissões (ou qualquer memória mapeada para ele).
Todos são privados ( p
flag), o que significa que, se um processo modifica uma página (que só é possível para a parte gravável), essa página será copiada (copy-on-write) e outros processos não serão copiados. veja qualquer mudança.
Essa última entrada é uma lacuna entre o segmento de código e o segmento de dados que é explicitamente inserido 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 do intervalo é de 2 MB, porque esse é o maior tamanho de página¹ que o Linux usa em sua arquitetura (amd64). Consulte Qual é a propósito de mapeamentos de memória aparentemente inutilizáveis no linux? para mais detalhes.
¹ A maioria das páginas é de 4kB, que é o tamanho de página "normal". Mas pode haver páginas que usem menos indireções de MMU, o que é um pouco mais rápido, mas desperdiça 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 painel do gnome usa 290MB? por RJK. Veja também a entrada para /proc/PID/maps
na documentação do kernel do Linux , Noções básicas sobre Linux / proc / id / maps e / proc / $ pid / maps mostra páginas sem permissões de rwx no x86_64 linux Estouro de pilha.