To jest polecenie, które można uruchomić w bezpłatnym dostawcy hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS
PROGRAM:
IMIĘ
memusage - profil wykorzystania pamięci przez program
STRESZCZENIE
pamięć [opcja] ... program [opcja programu] ...
OPIS
pamięć to skrypt basha profilujący wykorzystanie pamięci programu, program. To
wstępnie ładuje libmemmusage.so bibliotekę do środowiska wywołującego (za pośrednictwem LD_PRELOAD
Zmienna środowiskowa; zobaczyć ld.so(8)). ten libmemmusage.so biblioteka śledzi alokację pamięci
przechwytując połączenia do malloc(3) Calloc(3) za darmo(3), a reallokacja(3); opcjonalnie dzwoni
do mmap(2) mremap(2), a munmapa(2) można również przechwycić.
pamięć może wyprowadzić zebrane dane w formie tekstowej lub może je wykorzystać stan pamięci(1) (patrz
dotychczasowy -p opcję poniżej), aby utworzyć plik PNG zawierający graficzną reprezentację
Zebrane dane.
Pamięć zwyczaj streszczenie
Wyjście wiersza „Podsumowanie użycia pamięci” przez pamięć zawiera trzy pola:
kupa całkowity
Suma rozmiar argumenty wszystkich malloc(3) wezwania, produkty argumentów
(nmemb*rozmiar) ze wszystkich Calloc(3) połączenia i suma długość argumenty wszystkich mmap(2)
dzwoni. W przypadku reallokacja(3) i mremap(2), jeśli nowy rozmiar pliku
alokacja jest większa niż poprzednia wielkość, suma wszystkich takich różnic
(nowy rozmiar minus stary rozmiar).
kupa szczyt
Maksymalnie ze wszystkich rozmiar argumenty malloc(3), wszystkie produkty nmemb*rozmiar of
Calloc(3), wszystkie rozmiar argumenty reallokacja(3) długość argumenty mmap(2), a
nowy_rozmiar argumenty mremap(2).
stos szczyt
Przed pierwszym wywołaniem dowolnej monitorowanej funkcji adres wskaźnika stosu
(wskaźnik stosu podstawowego) jest zapisywany. Po każdym wywołaniu funkcji aktualny stos
odczytywany jest adres wskaźnika i różnica w stosunku do wskaźnika stosu podstawowego
obliczone. Maksimum tych różnic jest wówczas szczytem stosu.
Zaraz po tym wierszu podsumowania znajduje się tabela przedstawiająca liczbę połączeń i całkowitą pamięć
przydzielonych lub zwolnionych oraz liczbę nieudanych wywołań dla każdej przechwyconej funkcji. Dla
reallokacja(3) i mremap(2), dodatkowe pole „nomove” pokazuje zmiany, które uległy zmianie
adres bloku, a dodatkowe pole „dec” pokazuje, że realokacje spadły
wielkość bloku. Dla reallokacja(3), dodatkowe pole „wolne” pokazuje realokacje
co spowodowało zwolnienie bloku (tj. rozmiar ponownie przydzielonego wynosił 0).
„Realloc/całkowita pamięć” tabeli wyjściowej przez pamięć nie odzwierciedla przypadków, w których
reallokacja(3) służy do ponownego przydzielenia bloku pamięci w celu uzyskania mniejszego rozmiaru niż poprzednio.
Może to spowodować, że suma wszystkich komórek „całkowitej pamięci” (z wyjątkiem „wolnych”) będzie większa niż
komórka „wolna/całkowita pamięć”.
Histogram dla blok rozmiary
„Histogram rozmiarów bloków” przedstawia podział alokacji pamięci na różne
rozmiary wiader.
OPCJE
-n Nazwa, --nazwa_programu=Nazwa
Nazwa pliku programu do profilu.
-p filet, --png=filet
Wygeneruj grafikę PNG i zapisz ją filet.
-d filet, --dane=filet
Wygeneruj plik danych binarnych i zapisz go filet.
-u, --niebuforowane
Nie buforuj danych wyjściowych.
-b rozmiar, --bufor=rozmiar
Zbierać rozmiar wpisy przed ich zapisaniem.
--bez timera
Wyłącz funkcję timera (SIGPROF) próbkowanie wartości wskaźnika stosu.
-m, --mmapa
Również ślad mmap(2) mremap(2), a munmapa(2).
-?, --help
Wydrukuj pomoc i wyjdź.
--stosowanie
Wydrukuj krótką wiadomość dotyczącą użytkowania i zakończ.
-V, --wersja
Wydrukuj informacje o wersji i zakończ.
Poniższe opcje mają zastosowanie tylko podczas generowania wyników graficznych:
-t, --oparty na czasie
Użyj czasu (a nie liczby wywołań funkcji) jako skali osi X.
-T, --całkowity
Narysuj także wykres całkowitego wykorzystania pamięci.
--tytuł=Nazwa
Zastosowanie Nazwa jako tytuł wykresu.
-x rozmiar, --x-rozmiar=rozmiar
Zrób wykres rozmiar szerokość w pikselach.
-y rozmiar, --y-rozmiar=rozmiar
Zrób wykres rozmiar wysokość w pikselach.
EXIT STATUS
Status wyjścia jest równy statusowi wyjścia profilowanego programu.
PRZYKŁAD
Poniżej znajduje się prosty program, który ponownie przydziela blok pamięci w cyklach, które osiągają wartość szczytową
przedtem cykliczna ponowna alokacja pamięci w mniejszych blokach, które powracają do zera.
Po skompilowaniu programu i uruchomieniu poniższych poleceń wykres pamięci
sposób użycia programu znajdziesz w pliku memusage.png:
$ pamięć --data=pamięć.dat ./a.wyj
...
Podsumowanie wykorzystania pamięci: suma sterty: 45200, szczyt sterty: 6440, szczyt stosu: 224
całkowita liczba połączeń całkowita pamięć nieudanych połączeń
mallok| 1 400 0
realokacja| 40 44800 0 (nomove:40, gru:19, free:0)
kaloc| 0 0 0
wolny| 1 440
Histogram dla rozmiarów bloków:
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% ================
$ stan pamięci memusage.dat memusage.png
Program źródło
#włączać
#zawierać
#zdefiniuj CYKLE 20
int
main(int argc, char *argv[])
{
int ja, j;
int *p;
printf("malloc: %zd\n", sizeof(int) * 100);
p = malloc(rozmiar(int) * 100);
for (i = 0; i < CYKLE; i++) {
jeśli (i < CYKLE / 2)
j = ja;
więcej
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));
}
wolny(p);
wyjście (EXIT_SUCCESS);
}
Korzystaj z memusage online, korzystając z usług onworks.net