Почему профилировщик памяти не показывает всю используемую память?

Когда я запускаю свое приложение под valgrind с опцией massif, я вижу пиковое использование 52,6 МБ. введите описание изображения здесь Но htop сообщает, что процесс занял 875 МБ памяти RES. введите описание изображения здесь  введите описание изображения здесь

Такое же поведение имеет heaptrack. Кто-нибудь знает, почему профилировщик не сообщает, куда ушло 800+ МБ?


person teoring    schedule 07.01.2021    source источник
comment
massif только измеряет использование кучи и не отображает память (по умолчанию). Вы пробовали --pages-as-heap=yes?   -  person n. 1.8e9-where's-my-share m.    schedule 07.01.2021
comment
@ n.'pronouns'm. Вы можете отправить это как ответ. Это то, что мне нужно.   -  person teoring    schedule 07.01.2021
comment
Хотя заголовки ваших столбцов как-то смещены, кажется, что отображается 875M виртуальных, из которых 812M являются общими. Вы хотите подсчитывать общую память (например, подключенные разделяемые библиотеки) как использованную? Эта память могла быть использована даже без вашего процесса, и разница в ~ 63M выглядит примерно правильно.   -  person Useless    schedule 07.01.2021


Ответы (1)


Massif по умолчанию измеряет только кучу, управляемую malloc и друзьями. Он не пытается отслеживать страницы, отображаемые другими способами (например, с mmap).

Чтобы учесть все страницы, нужно запустить massif с --pages-as-heap=yes.

Источник: Руководство по массиву.

person n. 1.8e9-where's-my-share m.    schedule 07.01.2021