Почему так lib загружается более одного раза определенным процессом?
b7f27000 84K r-x-- /lib/libpthread-2.5.so
b7f3c000 4K ----- /lib/libpthread-2.5.so
b7f3d000 4K r---- /lib/libpthread-2.5.so
b7f3e000 4K rw--- /lib/libpthread-2.5.so
b7f3f000 8K rw--- [ anon ]
b7f41000 88K r-x-- /lib/libselinux.so.1
b7f57000 8K rw--- /lib/libselinux.so.1
b7f59000 256K r-x-- /usr/lib/libncurses.so.5.5
b7f99000 32K rw--- /usr/lib/libncurses.so.5.5
b7fa1000 8K rw--- [ anon ]
b7fa3000 4K r---- /usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES
b7fa4000 4K r---- /usr/lib/locale/en_US.utf8/LC_PAPER
b7fa5000 4K r---- /usr/lib/locale/en_US.utf8/LC_NAME
b7fa6000 4K r---- /usr/lib/locale/en_US.utf8/LC_ADDRESS
b7fa7000 4K r---- /usr/lib/locale/en_US.utf8/LC_TELEPHONE
b7fa8000 4K r---- /usr/lib/locale/en_US.utf8/LC_MEASUREMENT
b7fa9000 4K r---- /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
b7faa000 108K r-x-- /lib/ld-2.5.so
b7fc5000 4K r---- /lib/ld-2.5.so
b7fc6000 4K rw--- /lib/ld-2.5.so
bf96f000 228K rw--- [ stack ]
total 23740K
почему так загружаются либ больше времени? это нужно? Зачем?
1 ответ
На самом деле каждая из этих библиотек загружается только один раз; вы видите несколько областей памяти, используемых каждой библиотекой.
Библиотека содержит код, родату и данные (+bss). Код только для чтения и исполняемый (r-x
), родата только для чтения (r--
), а данные (и bss) доступны для чтения-записи (rw-
). Это сегменты памяти, на которые вы смотрите (обратите внимание, что все они имеют разные флаги и размеры защиты памяти). Не во всех библиотеках есть все эти сегменты, поэтому вы увидите, что в некоторых библиотеках отображается только две (или даже одна) область памяти.
Обратите внимание, что pmap
"Общий" вывод измеряет только использование виртуальной памяти (которая может быть очень высокой даже для небольших процессов). Для использования физической памяти используйте pmap -x
и смотреть под RSS
(размер резидентного набора).