Em geral, as bibliotecas possuem três tipos diferentes de memória carregados do arquivo. Estes são:
- code - O código executável real na biblioteca
- rodata - Dados somente leitura (valores constantes).
- data - dados graváveis.
Estes são mapeados com permissões diferentes. Se você olhar a primeira linha de cada mapeamento:
7f1a09696000-7f1a0982f000 r-xp 00000000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a0982f000-7f1a09a2e000 ---p 00199000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a09a2e000-7f1a09a32000 r--p 00198000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a09a32000-7f1a09a34000 rw-p 0019c000 fe:04 1313975 /usr/lib/libc-2.21.so
A segunda coluna da tabela contém as permissões para cada bloco mapeado. O primeiro bloco tem as permissões r-xp
. Este é o bloco de código e, portanto, é legível e executável.
O segundo bloco tem ---p
. Este bloco não está acessível. Ele provavelmente contém símbolos de depuração ou outros dados que não são realmente necessários para executar o programa.
O terceiro bloco tem r--p
. Este é o segmento de dados somente leitura. O último bloco tem rw-p
. Este é o segmento de dados graváveis.
A razão para os diferentes valores de Rss e Pss, etc. é simplesmente devido às diferentes quantidades de memória acessadas em cada região.
Se você está curioso sobre os significados dos vários campos, dê uma olhada na seção /proc/[pid]/smaps
no proc man page . A linha de cabeçalho de cada seção é documentada na seção /proc/[pid]/maps
.