top может показывать неправильное использование памяти

Я пишу простую программу на C ++ для Mac OS. я просто

int main()
{
int *n = new int[50000000];
}

Я запускаю эту программу в lldb и ставлю точку останова на строке, где n выделено. Потом запускаю top В другой вкладке я вижу, что предварительное выделение памяти составляет 336K. Когда я делаю n внутри lldb, так что выделение для n происходит, я ожидаю, что мое использование памяти увеличится. Однако top показывает мне тот же объем памяти, который используется моей программой. Что может быть причиной этого? Я пытаюсь понять, как происходит распределение памяти в C ++, поэтому я делаю это.

Я не вышел за рамки основного. Когда я снова проверяю top, я сижу на закрывающей фигурной скобке для main.

1

Решение

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

Распределение памяти с помощью кучи и свободного хранилища зависит от реализации в C ++. Но tt обычно не отображается один на один с вызовами выделения ОС. По соображениям производительности (вызовы в ОС медленнее, чем вызовы внутри кода вашей страны), память поступает от ОС более крупными порциями:

  • когда запускается среда выполнения c ++, она обычно выделяет некоторую память из ОС, чтобы выделить память, необходимую для стандартных объектов библиотеки, и инициализировать свободное хранилище, чтобы быстро удовлетворить запрос на выделение.
  • Только если эта начальная память исчерпана, стандартная библиотека будет выделять больше памяти из операционной системы.
  • И распределение делается снова большими кусками, так что не каждый new поднимет вызов ОС.

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

Если вы хотите более точно отслеживать потребление памяти, вам нужны некоторые инструменты профилирования, например valgrind или же heap команда

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]