Це команда memusage, яку можна запустити у безкоштовного хостинг-провайдера OnWorks за допомогою однієї з наших безкоштовних онлайн-робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS
ПРОГРАМА:
ІМ'Я
memusage - профіль використання пам'яті програмою
СИНТАКСИС
повідомлення [варіант]... програма [варіант програми]...
ОПИС
повідомлення це сценарій bash, який профілює використання пам’яті програмою, програма. Це
попередньо завантажує libmemusage.so бібліотеку в середовище абонента (через LD_PRELOAD
змінна середовища; побачити ld.так(8)). The libmemusage.so бібліотека відстежує розподіл пам'яті
шляхом перехоплення дзвінків до Танос(3) мозоль(3) безкоштовно(3), і перерозподіл(3); за бажанням дзвінки
до mmap(2) mremap(2), і munmap(2) також можна перехопити.
повідомлення може виводити зібрані дані в текстовій формі або використовувати memusagestat(1) (див
-p параметр нижче), щоб створити файл PNG із графічним зображенням
зібрані дані.
пам'ять використання резюме
Рядок "Підсумок використання пам'яті" виводиться за допомогою повідомлення містить три поля:
купа загальний
Сума розмір аргументи всіх Танос(3) виклики, продукти аргументів
(nmemb*розмір) з всіх мозоль(3) дзвінки та сума аргументи всіх mmap(2)
дзвінки. У випадку перерозподіл(3) і mremap(2), якщо новий розмір an
виділення більше попереднього розміру, сума всіх таких різниць
(новий розмір мінус старий розмір).
купа пік
Максимум з усіх розмір аргументи Танос(3), усі продукти компанії nmemb*розмір of
мозоль(3), всі розмір аргументи перерозподіл(3) аргументи mmap(2), і
новий_розмір аргументи mremap(2).
стек пік
Перед першим викликом будь-якої контрольованої функції адреса вказівника стека
(базовий покажчик стека) збережено. Після кожного виклику функції фактичний стек
адреса покажчика зчитується і відрізняється від покажчика базового стека
обчислюється. Тоді максимальна з цих відмінностей є піком стека.
Відразу після цього підсумкового рядка таблиця показує кількість викликів, загальну пам’ять
виділено або звільнено, а також кількість невдалих викликів для кожної перехопленої функції. для
перерозподіл(3) і mremap(2), додаткове поле "nomove" показує змінені перерозподіли
адреса блоку, а додаткове поле "dec" показує перерозподіли, які зменшилися
розмір блоку. для перерозподіл(3), додаткове поле «вільно» показує перерозподіл
що призвело до звільнення блоку (тобто перерозподілений розмір був 0).
"Realloc/total memory" таблиці, виведеної за повідомлення не відображає випадків, коли
перерозподіл(3) використовується для перерозподілу блоку пам’яті, щоб мати менший розмір, ніж раніше.
Це може призвести до того, що сума всіх комірок "загальної пам'яті" (за винятком "вільної") буде більшою за
комірка "вільна/загальна пам'ять".
Гістограма та цінності блок розміри
«Гістограма для розмірів блоків» надає розбивку розподілу пам’яті на різні
розміри ковша.
ВАРІАНТИ
-n ім'я, --progname=ім'я
Назва файлу програми для профілювання.
-p файл, --png=файл
Створіть графіку PNG і збережіть її файл.
-d файл, --дані=файл
Згенеруйте файл двійкових даних і збережіть його файл.
-u, --небуферизовані
Не буферизуйте вихід.
-b розмір, --buffer=розмір
Збирати розмір записи перед тим, як їх виписати.
--без таймера
Вимкнути на основі таймера (SIGPROF) вибірка значення покажчика стека.
-m, --mmap
Також слід mmap(2) mremap(2), і munmap(2).
-?, --допомога
Роздрукувати довідку та вийти.
--використання
Роздрукуйте коротке повідомлення про використання та вийдіть.
-V, -- версія
Роздрукувати інформацію про версію та вийти.
Наступні параметри застосовуються лише під час створення графічного виводу:
-t, --на основі часу
Використовуйте час (а не кількість викликів функцій) як шкалу для осі X.
-T, --всього
Також намалюйте графік загального використання пам’яті.
--title=ім'я
Скористайтесь ім'я як заголовок графіка.
-x розмір, --x-розмір=розмір
Складіть графік розмір пікселів шириною.
-y розмір, --y-size=розмір
Складіть графік розмір пікселів висотою.
EXIT СТАТУС
Статус виходу дорівнює статусу виходу профільованої програми.
приклад
Нижче наведено просту програму, яка перерозподіляє блок пам’яті за циклами, які досягають піку
перед цим циклічно перерозподіляючи пам'ять на менші блоки, які повертаються до нуля.
Після компіляції програми та виконання наступних команд, графік пам'яті
використання програми можна знайти у файлі memusage.png:
$ повідомлення --data=memusage.dat ./a.out
...
Підсумок використання пам’яті: загальна купа: 45200, пік купи: 6440, пік стека: 224
загальна кількість дзвінків загальна кількість викликів у пам’яті
malloc| 1 400 0
realloc| 40 44800 0 (nomove:40, dec:19, free:0)
calloc| 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% =================
$ memusagestat memusage.dat memusage.png
програма джерело
#включати
#включати
#define ЦИКЛИ 20
Int
main(int argc, char *argv[])
{
int i, j;
int *p;
printf("malloc: %zd\n", sizeof(int) * 100);
p = malloc(sizeof(int) * 100);
for (i = 0; i < CYCLES; i++) {
якщо (i < ЦИКЛИ / 2)
j = i;
ще
j--;
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));
}
безкоштовно (р);
вихід (EXIT_SUCCESS);
}
Використовуйте memusage онлайн за допомогою сервісів onworks.net