Я пишу простую программу на C ++ для Mac OS. я просто
int main()
{
int *n = new int[50000000];
}
Я запускаю эту программу в lldb и ставлю точку останова на строке, где n
выделено. Потом запускаю top
В другой вкладке я вижу, что предварительное выделение памяти составляет 336K. Когда я делаю n
внутри lldb, так что выделение для n происходит, я ожидаю, что мое использование памяти увеличится. Однако top показывает мне тот же объем памяти, который используется моей программой. Что может быть причиной этого? Я пытаюсь понять, как происходит распределение памяти в C ++, поэтому я делаю это.
Я не вышел за рамки основного. Когда я снова проверяю top, я сижу на закрывающей фигурной скобке для main.
top
Команда показывает статистику процесса с точки зрения операционной системы. Он показывает, сколько памяти было выделено для процесса, но не сколько этой памяти эффективно используется. Это не точно для мониторинга распределения памяти.
Распределение памяти с помощью кучи и свободного хранилища зависит от реализации в C ++. Но tt обычно не отображается один на один с вызовами выделения ОС. По соображениям производительности (вызовы в ОС медленнее, чем вызовы внутри кода вашей страны), память поступает от ОС более крупными порциями:
new
поднимет вызов ОС. Из ваших наблюдений, я предполагаю, что это начальное распределение больше, чем 50 МБ. Попробуйте с гораздо большим значением, чтобы увидеть разницу.
Если вы хотите более точно отслеживать потребление памяти, вам нужны некоторые инструменты профилирования, например valgrind
или же heap
команда
Других решений пока нет …