2015-06-18 6 views
7

dieses einfache Beispiel betrachten:Wie kann ich die Speicherzuordnung von C++ - Standardbibliotheksaufrufen verfolgen?

#include <algorithm> 
#include <iostream> 
#include <list> 
#include <numeric> 
#include <random> 
#include <vector> 
#include <iterator> 
int main() 
{ 
    std::list<int> l(10); 
    std::iota(l.begin(),l.end(),77); 

    std::vector<std::list<int>::iterator> v(l.size()); 
    std::iota(v.begin(), v.end(), l.begin()); 

    std::vector<int> dest; 
    std::copy_if(l.begin(), l.end(), std::back_inserter(dest), [](int i){return i%2==1;}); 

    for(auto n : dest) 
     std::cout << n << " "; 
    return 0; 
} 

Wenn unter Valgrind ausgeführt, es mir die folgende Ausgabe gibt:

==27353== total heap usage: 15 allocs, 15 frees, 380 bytes allocated 

Ist es möglich, genau zu verfolgen, wo diese Allocs aufgetreten (dh die Datenstruktur durchgeführt Zuordnung und wann genau)?

+0

haben Sie versucht [massiv] (http://valgrind.org/docs/manual/ms-manual.html)? –

+0

@ m.s. Ich tat es nur, aber die Ausgabe war die gleiche. – syntagma

+0

Sie müssen 'ms_print massif.out.12345' ausführen (Anzahl variiert) nach dem Ausführen von' valgrind --tool = massif' –

Antwort

2

Der richtige Weg C++ Bibliothek Zuordnung Anrufe zu verfolgen ist Massif, ein Heap-Profiler-Tool (Teil von Valgrind) zu verwenden:

  1. Run Valgrind mit Massif aktiviert:

    valgrind --tool=massif

  2. Verwenden Sie ms_print, um die Ausgabe von Massif zu analysieren:

    ms_print massif.out.12345 (number varies)