Вы оба правы и неправильно читаете вывод pmap.Если бы вы сделали pmap -x
, результаты, вероятно, были бы менее запутанными, показывая кучу только один раз, но поскольку вы добавили флаг -s
, он разбивает кучу на сегменты с различными отображениями страниц.
адреса, начинающиеся с 0x0022000, не выровнены должным образом для сопоставления со страницей 4 МБ, поэтому они используют 3960 КБ страниц по 8 КБ.0x0022000 + (3960 * 1024) = 0x00400000
При 0x00400000 адрес правильно выровнен для страниц размером 4 МБ, поэтому кучи переключается на использование страниц большего размера с меньшим количеством записей в таблице страниц.
Если вы хотитеубедитесь, что ваша куча началась с правильного выравнивания, чтобы использовать целые страницы 4 Мбайт вместо того, чтобы начинать с 8k, пока не достигнет границы выравнивания, тогда вы должны связать вашу программу с -M /usr/lib/ld/map.bssalign
, чтобы сделать это.
Чуть более подробное объяснение можно найти в блоге Размер страницы и структура памяти из Программирование приложений Solaris автор Дэррил Гоув .