Как узнать сколько памяти занимает программа c
Перейти к содержимому

Как узнать сколько памяти занимает программа c

  • автор:

 

Как узнать, сколько памяти использует программа?

У меня есть две программы, одна на C++, другая на ассемблере. Я хочу сравнить, сколько памяти они используют при работе соответственно. Как я могу это сделать?

Я провожу тестирование в Windows, но я также хотел бы знать, как это сделать в Linux.

задан 26 сен ’09, 03:09

9 ответы

Запустите программу в одной оболочке. Откройте другую оболочку и запустите команду «top». он будет перечислять запущенные процессы и выделять много памяти, которую они потребляют. я думаю, вы можете опросить /proc/yourprocessid/stat, чтобы узнать, сколько памяти он использует с течением времени.

хм, это довольно круто, это похоже на команду ps, но динамично. хотя мои программы довольно маленькие, поэтому я не думаю, что этот конкретный метод будет работать. — user176121

о, если это короткая программа. просто поместите его в цикл, пока вы смотрите его в «верхней части» для i в <1..3>; сделать пс; Выполнено; запускает пс 3 раза. Или, если вы можете отредактировать свою программу, добавьте сон в конце, чтобы у вас было время сделать «ps» до завершения программы — открывать

Обычно сверху я беру столбец «RES» (резидентный размер) минус столбец «SHR» (размер общей памяти). В большинстве случаев это дает хорошее представление о том, сколько ваша программа действительно использует. — Вениамин

В Linux попробуйте valgrind . Это удивительный инструмент со слишком большим количеством функций, чтобы простые смертные могли полностью его понять. Посмотри на valgrind ‘s massif .

Это очень полезно, но массив по умолчанию анализирует только динамическую память. Как мы можем читать дальше ссылке: «По умолчанию профилирование стека отключено, так как оно сильно замедляет работу Massif. [. ] Профилирование стека можно включить с помощью параметра —stacks=yes». — Дзаймацу

В Windows вы можете использовать системный монитор.

Использование монитора производительности

Запустите монитор производительности из меню «Пуск»/«Администрирование/Производительность».

Если вы хотите начать регистрацию:

Выберите журнал производительности и предупреждение > Текущий журнал в левой части браузера.

Выберите Новые настройки журнала.

Дайте соответствующее имя журналу, например, performance_Server для сервера.

Он подскажет вам одно меню. На вкладках «Общие» нажмите кнопку «Добавить» и выберите процесс, который вы хотите отслеживать. (Измените объект производительности на процесс, для «выбрать счетчики из списка» выберите «частные байты», для «выбора экземпляров из списка» выберите процесс, который вы хотите отслеживать.) После этого нажмите «Добавить» и закройте. Теперь измените интервал в соответствии с требованиями тестового примера. Теперь перейдите на вкладку «файлы журнала», измените тип файла журнала на формат csv или tsv. Теперь примените и нажмите OK.

Если вы хотите запустить/остановить ведение журнала:

Выберите конкретный журнал, который вы хотите запустить и остановить.

На панели инструментов выше вы увидите кнопку запуска и остановки.

Если вы хотите проверить содержимое файла журнала:

Щелкните Параметры/Данные из…

Выберите файл журнала для просмотра, нажмите OK.

Перейти к экрану графика (View/Chart)

Нажмите Редактировать/Добавить в диаграмму

Добавьте в схему необходимые элементы. (В случае, если утечка памяти должна быть проверена, вам необходимо просмотреть PrivateBytes процессов и их _Total)

Считайте значения с диаграммы (минимальные и максимальные значения отображаются внизу диаграммы)

Если вы хотите контролировать передачу по сети:

Отображение экрана диаграммы (View/Chart)

Нажмите «Изменить/Добавить в журнал» и выберите элементы «Сетевой интерфейс\Отправленные байты». Если вы установили его в dl

Или Network Inerface\ Bytes Received, если вы установили его в CRS-PC+.

Отслеживание использования памяти:

В меню Пуск/Программы/Администрирование/ запустите программу Performance Monitor

Нажмите на кнопку, чтобы открыть окно добавления процессов

Заполните поля следующим образом:

Счетчик: частные байты

Экземпляр: процесс, занятость памяти которого необходимо отобразить.

Нажмите кнопку Добавить

Повторите последние два шага для каждого процесса, память которого необходимо отобразить.

Закройте окно, добавляющее процессы

В нижней части окна системного монитора находится список ранее выбранных процессов.

Как использовать записанные данные

  1. Теперь откройте файл Perfmon_.csv или Perfmon_.tsv с помощью WordPad или Excel.

Если вы открыли файл с помощью Excel, то с помощью опции Сохранить как сохраните файл в формате Microsoft Excel.

Как узнать сколько памяти отжирает преложение в текущий момент (программно)

Необходим код, который возвращает в байтах занимаемую память текущего приложения, как в диспетчере задач.

Комментарии ниже приводят к следующему результату:

введите сюда описание изображения

Если вам нужно именно значение, показываемое в Task Manager, то его можно вычитать из счетчиков производительности:

На самом деле Working Set — Private — это не совсем «количество памяти, выделенное процессу». Сам по себе Working Set — это та часть виртуальной памяти, к которой процесс обращался недавно, и которой еще соответствует физическая память. А Working Set — Private — это неразделяемая часть Working Set.

Т.е. реальному потреблению памяти этот показатель имеет очень косвенное отношение, т.к. зависит не только от выделения памяти в программе, но и от того, как давно программа к ней обращалась, и от общего состояния памяти в системе.

 

Как узнать, сколько памяти использует программа?

У меня есть две программы, одна на C ++, другая на ассемблере. Я хочу сравнить, сколько памяти они используют при работе соответственно. Как я могу это сделать?

Я провожу тестирование в Windows, но я также хотел бы знать, как это сделать в Linux.

9 ответов

Запускаем программу в одной оболочке. Откройте другую оболочку и выполните команду «top». он перечислит запущенные процессы и поместит много памяти, которую они потребляют. я думаю, вы можете опросить / proc / yourprocessid / stat, чтобы узнать, сколько памяти он использует с течением времени.

В Linux попробуйте valgrind . Это удивительный инструмент, в котором слишком много функций, чтобы простые смертные могли полностью понять. Взгляните на massif valgrind .

В Windows вы можете использовать Системный монитор.

Использование монитора производительности

Запустите Performance Monitor из меню «Пуск» / «Администрирование» / «Производительность».

Если вы хотите начать регистрацию:

Выберите журнал производительности и предупреждение> Текущий журнал в левой части браузера.

Выберите «Новые настройки журнала».

Дайте журналу подходящее имя, например performance_Server для сервера

Это предложит вам одно меню. На вкладках «Общие» нажмите кнопку «Добавить» и выберите процесс, который вы хотите отслеживать. (Измените объект производительности на процесс, для «выбрать счетчики из списка» выберите «личные байты», для «выбрать экземпляры из списка» выберите процесс, который вы хотите отслеживать.) После этого нажмите «Добавить и закрыть». Теперь измените интервал в соответствии с требованиями тестового примера. Теперь перейдите на вкладку «файлы журнала» и измените тип файла журнала на формат csv или tsv. Теперь примените и нажмите ОК.

Если вы хотите запустить / остановить ведение журнала:

Выберите конкретный журнал, который вы хотите запустить и остановить.

На панели инструментов выше вы увидите кнопки запуска и остановки.

Если вы хотите проверить содержимое файла журнала:

Щелкните Параметры / Данные из…

Выберите файл журнала для просмотра, нажмите ОК.

Перейти к экрану карты (Просмотр / Карта)

Нажмите Edit / Add to chart.

Добавьте необходимые элементы в диаграмму. (В случае, если требуется проверить утечку памяти, вам необходимо просмотреть PrivateBytes процессов и их _Total)

Считайте значения из диаграммы (минимальные и максимальные значения отображаются в нижней части диаграммы)

Если вы хотите отслеживать передачу данных по сети:

Отображение экрана карты (Просмотр / Карта)

Нажмите Edit / Add для входа в журнал и выберите элементы Network Interface \ Bytes Sent, если вы установили его в dl.

Или Network Inerface \ Bytes Received, если вы установите его в CRS-PC +

Мониторинг использования памяти:

В меню Пуск / Программы / Администрирование / запустите программу Performance Monitor.

Нажмите на кнопку, чтобы открыть окно добавления процессов.

Заполните поля следующим образом:

Счетчик: частные байты

Экземпляр: процесс, для которого необходимо отобразить занятость памяти.

Нажмите кнопку Добавить

Повторите последние два шага для каждого процесса, который необходимо отобразить в памяти.

Закройте окно, которое добавляет процессы

Внизу окна монитора производительности находится список ранее выбранных процессов.

Как использовать зарегистрированные данные

  1. Теперь откройте файл Perfmon_.csv или Perfmon_.tsv с помощью WordPad или Excel.

Если вы открыли файл в Excel, то с помощью опции «Сохранить как» сохраните файл в формате Microsoft Excel.

Диспетчер задач Windows может показать использование памяти каждым процессом. Думаю, вы могли бы использовать вместо этого Valgrind, но я не вижу в этом смысла. В Linux используйте Valgrind или ps.

Как я могу узнать, сколько памяти мое приложение использует в любое время в Stack Overflow

У меня есть программа, которая выполняет определенную задачу над несколькими файлами, поэтому она имеет следующую структуру:

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

Чтобы проверить, действительно ли у меня есть утечка памяти в этой функции, например, измерить объем памяти, который мое приложение использует до и после вызова processFile, и запустить его для очень большого набора данных и посмотреть, как изменяется использование памяти во время обработки.

Можно ли измерить объем памяти, который мое приложение использует внутри этого приложения?

Таким же образом, я могу найти объем памяти, который каждая часть моего приложения использует во время выполнения?

Решение

если вы хотите измерить, сколько памяти используется с помощью приведенного выше кода во время выполнения, вы должны рассчитать это:

(количество элементов в fileList) * sizeof (строка) + размер файлов в fileList

но если вы хотите получить все использование памяти вашего процесса в Windows во время выполнения, вы можете позвонить GetProcessMemoryInfo API в вашей программе и передать ваш дескриптор процесса (GetCurrentProcess () API) к нему, пример использования этого API:

см полный ответ на ваш вопрос по этой ссылке:

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

Распространенным решением для обнаружения утечек памяти и мониторинга использования памяти будет запуск вашей программы с Valgrind .

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *