18 Ocak 2021 Pazartesi

valgrind mem-check aracı

Giriş
Heap bilgilerini gösterir

gdb
memcheck ile gdb'yi beraber kullanmak için şöyle yaparız.
valgrind --vgdb=yes --vgdb-error=0 app
Örnek
Şöyle yaparız.
valgrind --tool=memcheck ./myprogram 4
Bu komut sonund HEAP SUMMARY çıktısına bakılır. 

total heap usage satırında toplam kaç tane alloc ve kaç tane free yapıldığı görülebilir. X bytes allocated bilgisi de heap'ten toplam ne kadar bellek kullanıldığını gösterir. 

Örnek
Elimizde şöyle bir kod olsunn
#include <fstream>

int main(int, char**) {
    std::ifstream ww15mgh("ww15mgh.grd");
    double value;
    while (ww15mgh >> value);
    return 0;
}
Bu kodu çalıştıralım. 1 milyon defa alloc ve 1 milyon defa free yapılmış, ve tüm alloc'ların toplamı  59,302,487 byte.
$ g++ stackoverflow.cpp
$ valgrind --tool=memcheck --leak-check=yes ./a.out 2>&1 | grep total
==523661==   total heap usage: 1,038,970 allocs, 1,038,970 frees, 59,302,487 
Açıklaması şöyle
The number 59,302,487 shown by valgrind is the sum of all allocations, and does not represent the actual memory consumption of the program.
Şimdi aynı kodu biraz değiştirelim ve şöyle yapalım
#include <fstream>
#include <string>
#include <cstdio>

int main(int, char**) {
    std::ifstream ww15mgh("ww15mgh.grd");
    double value;
    std::string text;
    while (ww15mgh >> text)
        std::sscanf(text.c_str(), "%lf", &value);
    return 0;
}
$ g++ stackoverflow2.cpp
$ valgrind --tool=memcheck --leak-check=yes ./a.out 2>&1 | grep total
==534531==   total heap usage: 3 allocs, 3 frees, 81,368 bytes allocated
3 defa alloc ve 3 defa free yapılıyor. Tüm alloc'ların toplamı 81,368 byte.

Hiç yorum yok:

Yorum Gönder