Heap bilgilerini gösterir
gdb
memcheck ile gdb'yi beraber kullanmak için şöyle yaparız.
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
Şimdi aynı kodu biraz değiştirelim ve şöyle yapalımThe number 59,302,487 shown by valgrind is the sum of all allocations, and does not represent the actual memory consumption of the program.
#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;
}
Bu koduu çalıştıralım.
$ 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.