Aceasta este comanda memusage care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS
PROGRAM:
NUME
memusage - utilizarea memoriei de profil a unui program
REZUMAT
memusage [opțiune] ... program [opțiunea programului] ...
DESCRIERE
memusage este un script bash care profilează utilizarea memoriei programului, program. Ea
preîncărcă libmemusage.so bibliotecă în mediul apelantului (prin intermediul LD_PRELOAD
variabilă de mediu; vedea ld.deci(8)). The libmemusage.so biblioteca urmărește alocarea memoriei
prin interceptarea apelurilor către malloc(3), calloc(3), gratuit(3), și realloc(3); opțional, apeluri
la mmap(2), mremap(2), și munmap(2) poate fi de asemenea interceptat.
memusage poate scoate datele colectate în formă textuală sau poate utiliza memusagestat(1) (vezi
il -p opțiunea de mai jos) pentru a crea un fișier PNG care conține reprezentarea grafică a fișierului
datele colectate.
Memorie folosire rezumat
Linia „Rezumatul utilizării memoriei” redată de memusage contine trei campuri:
morman total
Suma de mărimea argumentele tuturor malloc(3) apeluri, produse ale argumentelor
(nmemb*mărimea) dintre toate calloc(3) apeluri, și suma de lungime argumentele tuturor mmap(2)
apeluri. În cazul în care realloc(3) și mremap(2), dacă noua dimensiune a an
alocarea este mai mare decât dimensiunea anterioară, suma tuturor acestor diferențe
(dimensiune nouă minus dimensiunea veche) este adăugată.
morman vârf
Maximul tuturor mărimea argumente ale malloc(3), toate produsele din nmemb*mărimea of
calloc(3), toate mărimea argumente ale realloc(3), lungime argumente ale mmap(2), și
dimensiune_nouă argumente ale mremap(2).
stivui vârf
Înainte de primul apel către orice funcție monitorizată, adresa pointerului stivei
(indicatorul de stivă de bază) este salvat. După fiecare apel de funcție, stiva reală
adresa pointerului este citită și diferența față de indicatorul stivei de bază
calculat. Maximul acestor diferențe este atunci vârful stivei.
Imediat după această linie de rezumat, un tabel arată numărul de apeluri, memoria totală
alocate sau dealocate și numărul de apeluri eșuate pentru fiecare funcție interceptată. Pentru
realloc(3) și mremap(2), câmpul suplimentar „nomove” arată realocările care s-au modificat
adresa unui bloc, iar câmpul suplimentar „dec” arată realocările care au scăzut
dimensiunea blocului. Pentru realloc(3), câmpul suplimentar „gratuit” arată realocările
care a determinat eliberarea unui bloc (adică dimensiunea realocata a fost 0).
„Realloc/memorie totală” a tabelului rezultat de memusage nu reflectă cazurile în care
realloc(3) este folosit pentru a realoca un bloc de memorie pentru a avea o dimensiune mai mică decât anterior.
Acest lucru poate face ca suma tuturor celulelor „memorie totală” (cu excepția „liberului”) să fie mai mare decât cel
celula „memorie liberă/totală”.
Histogramă pentru bloca dimensiuni
„Histograma pentru dimensiunile blocurilor” oferă o defalcare a alocărilor de memorie în diferite
dimensiunile găleților.
OPŢIUNI
-n nume, --program=nume
Numele fișierului de program pentru profil.
-p fişier, --png=fişier
Generați grafic PNG și stocați-l în fişier.
-d fişier, --data=fişier
Generați fișierul de date binare și stocați-l în fişier.
-u, --nebuffered
Nu tamponați ieșirea.
-b mărimea, --buffer=mărimea
Colecta mărimea intrări înainte de a le scrie.
--fără cronometru
Dezactivați bazat pe cronometru (SIGPROF) eșantionarea valorii indicatorului stivei.
-m, --mmap
De asemenea, urmă mmap(2), mremap(2), și munmap(2).
-?, --Ajutor
Imprimați ajutorul și ieșiți.
--utilizare
Imprimați un mesaj scurt de utilizare și ieșiți.
-V, --versiune
Tipăriți informațiile despre versiune și ieșiți.
Următoarele opțiuni se aplică numai la generarea rezultatelor grafice:
-t, --bazat pe timp
Utilizați timpul (mai degrabă decât numărul de apeluri de funcții) ca scară pentru axa X.
-T, --total
De asemenea, desenați un grafic al utilizării totale a memoriei.
--titlu=nume
Utilizare nume ca titlul graficului.
-x mărimea, --x-size=mărimea
Faceți graficul mărimea pixeli lățime.
-y mărimea, --y-size=mărimea
Faceți graficul mărimea pixeli înalți.
EXIT STAREA
Starea de ieșire este egală cu starea de ieșire a programului profilat.
EXEMPLU
Mai jos este un program simplu care realocă un bloc de memorie în cicluri care se ridică la un vârf
înainte de realocarea ciclică a memoriei în blocuri mai mici care revin la zero.
După compilarea programului și rularea următoarelor comenzi, un grafic al memoriei
utilizarea programului poate fi găsită în fișier memusage.png:
$ memusage --data=memusage.dat ./a.out
...
Rezumatul utilizării memoriei: total heap: 45200, heap peak: 6440, stack peak: 224
total apeluri memorie totală apeluri eșuate
malloc| 1 400 0
realloc| 40 44800 0 (nomove:40, dec:19, gratuit:0)
calloc| 0 0 0
liber| 1
Histograma pentru dimensiunile blocurilor:
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
Program sursă
#include
#include
#define CICLURI 20
int
main(int argc, char *argv[])
{
int i, j;
int *p;
printf("malloc: %zd\n", sizeof(int) * 100);
p = malloc(sizeof(int) * 100);
pentru (i = 0; i < CICLE; i++) {
dacă (i < CICLURI / 2)
j = i;
altfel
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));
}
liber(p);
ieșire(EXIT_SUCCESS);
}
Utilizați memusage online folosind serviciile onworks.net