куча VS anon памяти в результате pmap - PullRequest
6 голосов
/ 28 января 2010

Ниже приведен результат после запуска на солярисе, он показывает, что есть две кучи, но в моем понимании для процесса есть только одна куча, которая представляет собой большую непрерывную память, которой может управлять brk для расширения или сжатия размер. А для дополнительной памяти процесс может иметь много дополнительной памяти, которой можно управлять с помощью mmap / munmap. Правильно ли мое понимание? или я неправильно прочитал результат pmap?

sol9 # pmap -sx pgrep testprog

... 00022000 3960 3960 3960 - 8K rwx-- [куча]

00400000 131072 131072 131072 - 4M rwx-- [куча]

... FF390000 8 8 - - 8K r-x-- libc_psr.so.1

FF3B0000 8 8 8 - 8K RWX-- [anon]

...


всего КБ 135968 135944 135112 -

1 Ответ

4 голосов
/ 14 августа 2011

Вы оба правы и неправильно читаете вывод pmap.Если бы вы сделали pmap -x, результаты, вероятно, были бы менее запутанными, показывая кучу только один раз, но поскольку вы добавили флаг -s, он разбивает кучу на сегменты с различными отображениями страниц.

адреса, начинающиеся с 0x0022000, не выровнены должным образом для сопоставления со страницей 4 МБ, поэтому они используют 3960 КБ страниц по 8 КБ.0x0022000 + (3960 * 1024) = 0x00400000

При 0x00400000 адрес правильно выровнен для страниц размером 4 МБ, поэтому кучи переключается на использование страниц большего размера с меньшим количеством записей в таблице страниц.

Если вы хотитеубедитесь, что ваша куча началась с правильного выравнивания, чтобы использовать целые страницы 4 Мбайт вместо того, чтобы начинать с 8k, пока не достигнет границы выравнивания, тогда вы должны связать вашу программу с -M /usr/lib/ld/map.bssalign, чтобы сделать это.

Чуть более подробное объяснение можно найти в блоге Размер страницы и структура памяти из Программирование приложений Solaris автор Дэррил Гоув .

...