Это команда memusage, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
memusage - профиль использования памяти программой
СИНТАКСИС
воспоминание [вариант] ... программа [программа] ...
ОПИСАНИЕ
воспоминание это сценарий bash, который профилирует использование памяти программой, программа, Это
предварительно загружает libmemusage.so библиотеку в среду вызывающего абонента (через LD_PRELOAD
переменная окружения; видеть ld.so(8)). В libmemusage.so библиотека отслеживает выделение памяти
перехватив звонки на таНос(3) каллок(3) бесплатно(3), и перераспределить(3); опционально звонки
в ММАП(2) мремап(2), и мунмап(2) также может быть перехвачен.
воспоминание может выводить собранные данные в текстовой форме или использовать мемусагестат(1) (см.
домен -p вариант ниже), чтобы создать файл PNG, содержащий графическое представление
собранные данные.
Память пользования резюме
Строка «Сводка использования памяти» выводится воспоминание содержит три поля:
куча общий
Сумма размер аргументы всех таНос(3) вызовы, продукты аргументов
(нмемб*размер) из всех каллок(3) звонки и сумма аргументы всех ММАП(2)
звонки. На случай, если перераспределить(3) и мремап(2), если новый размер
выделение больше, чем предыдущий размер, сумма всех таких различий
(новый размер минус старый) добавлен.
куча пик
Максимум всего размер аргументы таНос(3), все продукты нмемб*размер of
каллок(3), все размер аргументы перераспределить(3) аргументы ММАП(2), и
новый_размер аргументы мремап(2).
стек пик
Перед первым вызовом любой отслеживаемой функции адрес указателя стека
(указатель базового стека) сохраняется. После каждого вызова функции фактический стек
считывается адрес указателя и отличается от указателя базового стека
вычислено. Тогда максимум этих различий является пиком суммирования.
Сразу после этой итоговой строки в таблице показаны номера вызовов, общий объем памяти.
выделено или освобождено, а также количество неудачных вызовов для каждой перехваченной функции. Для
перераспределить(3) и мремап(2) дополнительное поле "nomove" показывает перераспределения, которые изменили
адрес блока, а дополнительное поле «dec» показывает перераспределения, которые уменьшились
размер блока. Для перераспределить(3) дополнительное поле «бесплатно» показывает перераспределения
это вызвало освобождение блока (т. е. перераспределенный размер был равен 0).
"Перераспределение / общая память" таблицы, выводимой воспоминание не отражает случаи, когда
перераспределить(3) используется для перераспределения блока памяти, чтобы он имел меньший размер, чем раньше.
Это может привести к тому, что сумма всех ячеек "общей памяти" (за исключением "свободных") будет больше, чем
Ячейка "свободная / общая память".
Гистограмма для блок Размеры
"Гистограмма размеров блоков" дает разбивку распределения памяти на различные
размеры ковша.
ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ
-n имя, --progname =имя
Имя файла программы для профиля.
-p файл, --png =файл
Сгенерируйте графику PNG и сохраните ее в файл.
-d файл, --data =файл
Создайте файл двоичных данных и сохраните его в файл.
-u, - без буферизации
Не буферизовать вывод.
-b размер, --buffer =размер
Собирать размер записи перед их записью.
- нет таймера
Отключить таймер (СИГПРОФ) выборка значения указателя стека.
-m, --mmap
Также проследить ММАП(2) мремап(2), и мунмап(2).
-?, --Помогите
Распечатать справку и выйти.
--использование
Распечатайте короткое сообщение об использовании и выйдите.
-V, --версия
Распечатать информацию о версии и выйти.
Следующие параметры применяются только при создании графического вывода:
-t, - по времени
Используйте время (а не количество вызовов функций) в качестве масштаба для оси X.
-T, --общий
Также нарисуйте график общего использования памяти.
--title =имя
Используйте имя как название графика.
-x размер, --x-размер =размер
Сделайте график размер пикселей в ширину.
-y размер, --y-size =размер
Сделайте график размер пикселей в высоту.
ВЫХОД статус
Статус выхода равен статусу выхода профилированной программы.
ПРИМЕР
Ниже приведена простая программа, которая перераспределяет блок памяти в циклах с максимальным увеличением.
перед этим циклическое перераспределение памяти на более мелкие блоки, которые возвращаются к нулю.
После компиляции программы и выполнения следующих команд график памяти
использование программы можно найти в файле мемуары.png:
$ воспоминание --data = memusage.dat ./a.out
...
Сводка по использованию памяти: всего кучи: 45200, пикового значения кучи: 6440, пикового значения стека: 224
всего вызовов общая память невыполненные вызовы
malloc | 1 400 0
realloc | 40 44800 0 (nomove: 40, dec: 19, free: 0)
каллок | 0 0 0
бесплатно | 1 440
Гистограмма для размеров блока:
192-207 1 2% ================
...
2192-2207 1 2% ================
2240–2255 2 4% ===================================
2832–2847 2 4% ===================================
3440–3455 2 4% ===================================
4032–4047 2 4% ===================================
4640–4655 2 4% ===================================
5232–5247 2 4% ===================================
5840–5855 2 4% ===================================
6432-6447 1 2% ================
$ мемусагестат memusage.dat мемуары.png
FitPartner™ источник
#включает в себя
#включают
#define ЦИКЛЫ 20
Int
main (int argc, char * argv [])
{
инт я, дж;
int * p;
printf ("malloc:% zd \ n", sizeof (int) * 100);
p = malloc (sizeof (int) * 100);
for (i = 0; i <CYCLES; i ++) {
если (i <ЦИКЛЫ / 2)
дж = я;
еще
ж--;
printf ("realloc:% zd \ n", sizeof (int) * (j * 50 + 110));
p = realloc (p, sizeof (int) * (j * 50 + 100));
printf ("realloc:% zd \ n", sizeof (int) * ((j + 1) * 150 + 110));
p = realloc (p, sizeof (int) * ((j + 1) * 150 + 110));
}
бесплатно (p);
выход (EXIT_SUCCESS);
}
Используйте memusage онлайн с помощью сервисов onworks.net