Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen komut mesajıdır.
Program:
ADI
memusage - bir programın profil hafızası kullanımı
SİNOPSİS
hatıra [seçenek] ... program [program seçeneği] ...
TANIM
hatıra programın bellek kullanımının profilini çıkaran bir bash betiğidir, program. O
önceden yükler libmemusage.so kütüphaneyi arayanın ortamına aktarın (üzerinden LD_PRELOAD
Çevre değişkeni; görmek ld.so(8)). NS libmemusage.so kütüphane bellek tahsisini izler
çağrıları engelleyerek malloc(3) Calloc(3) ücretsiz(3), ve yeniden tahsis etmek(3); isteğe bağlı olarak aramalar
için mmap(2) mre haritası(2), ve harita(2) aynı zamanda ele geçirilebilir.
hatıra Toplanan verileri metin biçiminde yayınlayabilir veya kullanabilir memusagestat(1) (bkz.
the -p seçeneği, aşağıda) grafiksel temsilini içeren bir PNG dosyası oluşturmak için
toplanan veri.
Bellek kullanım özet
"Bellek kullanımı özeti" satırı çıktısı hatıra üç alan içerir:
yığın Genel Toplam
Toplamı boyut hepsinin argümanları malloc(3) çağrılar, argümanların ürünleri
(üye*boyut) tümünden Calloc(3) çağrılar ve toplamı uzunluk hepsinin argümanları mmap(2)
Aramalar. Bu durumuda yeniden tahsis etmek(3) ve mre haritası(2), eğer yeni boyut
tahsis önceki boyuttan daha büyükse, tüm bu farkların toplamı
(yeni boyut eksi eski boyut) eklenir.
yığın zirve
Hepsinden maksimum boyut argümanları malloc(3), tüm ürünler üye*boyut of
Calloc(3), hepsi boyut argümanları yeniden tahsis etmek(3) uzunluk argümanları mmap(2), ve
yeni_boyut argümanları mre haritası(2).
yığın zirve
İzlenen herhangi bir işleve ilk çağrı yapılmadan önce yığın işaretçisi adresi
(temel yığın işaretçisi) kaydedilir. Her işlev çağrısından sonra gerçek yığın
işaretçi adresi okunur ve temel yığın işaretçisinden farkı
hesaplanmış. Bu farkların maksimumu yığın tepe noktasıdır.
Bu özet satırının hemen ardından, çağrıların sayısını, toplam hafızayı gösteren bir tablo görüntülenir.
tahsis edilen veya tahsisi kaldırılan ve ele geçirilen her işlev için başarısız çağrıların sayısı. İçin
yeniden tahsis etmek(3) ve mre haritası(2), "nomove" ek alanı değişen yeniden tahsisleri gösterir
bir bloğun adresi ve ek "dec" alanı azalan yeniden tahsisleri gösterir
bloğun boyutu. İçin yeniden tahsis etmek(3), "serbest" ek alanı yeniden tahsisleri gösterir
bu, bir bloğun serbest bırakılmasına neden oldu (yani, yeniden tahsis edilen boyut 0'dı).
Tablo çıktısının "yeniden tahsis/toplam hafızası" hatıra olduğu durumları yansıtmaz.
yeniden tahsis etmek(3) bir bellek bloğunu daha önce olduğundan daha küçük bir boyuta sahip olacak şekilde yeniden tahsis etmek için kullanılır.
Bu, tüm "toplam bellek" hücrelerinin toplamının ("boş" hariç) hücreden daha büyük olmasına neden olabilir.
"boş/toplam hafıza" hücresi.
Histogram için blok boyutları
"Blok boyutları için histogram", bellek tahsislerinin çeşitli bölümlere ayrılmasını sağlar
kova boyutları.
SEÇENEKLER
-n isim, --progname=isim
Profildeki program dosyasının adı.
-p dosya, --png=dosya
PNG grafiği oluşturun ve saklayın dosya.
-d dosya, --veri=dosya
İkili veri dosyası oluşturun ve bunu içinde saklayın dosya.
-u, --tamponsuz
Çıktıyı ara belleğe almayın.
-b boyut, --tampon=boyut
Toplamak boyut girişleri yazmadan önce.
--zamanlayıcı yok
Zamanlayıcı tabanlıyı devre dışı bırak (SIGPROF) yığın işaretçisi değerinin örneklenmesi.
-m, --mmap
Ayrıca iz mmap(2) mre haritası(2), ve harita(2).
-?, --yardım et
Yardımı yazdırın ve çıkın.
--kullanım
Kısa bir kullanım mesajı yazdırın ve çıkın.
-V, --versiyon
Sürüm bilgilerini yazdırın ve çıkın.
Aşağıdaki seçenekler yalnızca grafik çıktı oluşturulurken geçerlidir:
-t, --zamana dayalı
X ekseni ölçeği olarak zamanı (işlev çağrılarının sayısı yerine) kullanın.
-T, --Toplam
Ayrıca toplam bellek kullanımının bir grafiğini çizin.
--başlık=isim
kullanım isim grafiğin başlığı olarak.
-x boyut, --x-boyutu=boyut
Grafiği oluştur boyut piksel genişliğinde.
-y boyut, --y-boyutu=boyut
Grafiği oluştur boyut piksel yüksek.
EXIT DURUMU
Çıkış durumu, profilli programın çıkış durumuna eşittir.
ÖRNEK
Aşağıda, zirveye çıkan döngülerde bir bellek bloğunu yeniden tahsis eden basit bir program bulunmaktadır.
daha sonra belleği sıfıra dönen daha küçük bloklara döngüsel olarak yeniden tahsis etmeden önce.
Programı derledikten ve aşağıdaki komutları çalıştırdıktan sonra hafıza grafiği
programın kullanımı dosyada mevcuttur memusage.png:
$ hatıra --data=memusage.dat ./a.dışarı
...
Bellek kullanımı özeti: yığın toplamı: 45200, yığın zirvesi: 6440, yığın zirvesi: 224
toplam aramalar toplam hafıza başarısız aramalar
malloc| 1 400 0
realloc| 40 44800 0 (hareketsiz:40, aralık:19, serbest:0)
kalloc| 0 0 0
ücretsiz| 1 440
Blok boyutları için histogram:
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ı kaynak
#Dahil etmek
#Dahil etmek
#define DÖNGÜLER 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 < DÖNGÜLER; i++) {
if (i < DÖNGÜLER / 2)
j = ben;
başka
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));
}
ücretsiz(p);
çıkış(EXIT_SUCCESS);
}
Onworks.net hizmetlerini kullanarak memusage'ı çevrimiçi kullanın