Может ли массив измерять глобальные / статические данные?

Я вижу, что массив может измерять использование кучи, а также использовать стек с некоторыми параметрами. Сообщает ли он также о глобальном потреблении данных (данных, определенных как глобальные или статические переменные)?

1 ответ

Сообщает ли он также о глобальном потреблении данных (данных, определенных как глобальные или статические переменные)?

Нет, Massif - это инструмент, предназначенный только для кучи, он не измеряет разделы.data и.bss и непосредственно память mmap-ed (но он может измерять стек, который используется для хранения некоторых локальных переменных и alloca):

http://valgrind.org/docs/manual/ms-manual.html

Массив это куча профилировщик. Он измеряет, сколько кучи памяти использует ваша программа. Это включает в себя как полезное пространство, так и дополнительные байты, выделенные для целей бухгалтерского учета и выравнивания. Он также может измерять размер стека (ов) вашей программы, хотя по умолчанию этого не происходит....

9.2.8. Измерение всей памяти в процессе

Стоит подчеркнуть, что по умолчанию Massif измеряет только кучную память, т.е. память, выделенную с malloc, calloc, realloc, memalign, new, new[]и еще несколько похожих функций. (И он может опционально измерять стековую память, конечно.) Это означает, что он не измеряет напрямую память, выделенную системным вызовам более низкого уровня, таким как mmap, mremap, а также brk,...

--stacks=<yes|no> [default: no]

Указывает, следует ли выполнять профилирование стека. Эта опция значительно замедляет работу массива и по умолчанию отключена. Обратите внимание, что Massif предполагает, что основной стек имеет нулевой размер при запуске. Это неправда, но делать иначе точно сложно. Кроме того, начинание с нуля лучше указывает на размер части основного стека, который фактически контролируется пользовательской программой.

Другие вопросы по тегам