heaptrack (http://milianw.de/blog/heaptrack-a-heap-memory-profiler-for-linux) should be perfect for this. It shows a lovely 20-spike graph when combined with massif-vizualiser: http://i.imgur.com/Q7cXF8N.png
Regards, -- Peter Bortas On Mon, Jun 8, 2015 at 1:50 PM, Peter Toft <p...@linuxbog.dk> wrote: > Hi guys > > I have some C/C++ programs that use very odd memory usage. I have made a > small replica below > (it can also be taken from http://pastebin.com/1ammgpCE) > Save e.g. as memfun.c > > In the C-code I generate 20 peaks of very short memory peaks, and you > can compile (on Linux) and run as this: > gcc -o memfun memfun.c -lm > valgrind --tool=massif --massif-out-file=massif.out ./memfun > massif-visualizer massif.out > or > ms_print massif.out > massif.txt; less massif.txt) > > (BTW; Thanx to the maintainers of massif-visualizer - this rocks) > > > However with the standard settings I only get 3 memory peaks detected - > not 20. > Obviously I can tweak --threshold= and --peak-inaccuracy= but it seems > that > I in general can be sure that I can catch all peaks. Please comment :-) > > Are these something that I miss here? Are there other tools that are > better suited for > detecting memory peaks like this memory-hedgehog.... > > Thanx mates > > Best > > Peter > > ---------------- > #include <stdio.h> > #include <stdlib.h> > #include <math.h> > > /* > Demo program: > gcc -o memfun memfun.c -lm > valgrind --tool=massif --massif-out-file=massif.out ./memfun > massif-visualizer massif.out > (or ms_print massif.out > massif.txt; less massif.txt) > */ > > > int main(void) > { > int ii,jj; > int *pt; > int *pt2; > float ac; > int numberOfPeaks = 0; > > for (ii=0;ii<100;ii++) { > /* Allocate some small linearly increasing memory block */ > pt = (int *)malloc((1000*ii+1)*sizeof(int)); > if (ii%5 == 0) { > /* Allocate some gigantic memory block - but only every 10th > iteration */ > pt2 = (int *)malloc((1000000)*sizeof(int)); > printf("Allocating large memory block\n"); > numberOfPeaks++; > } else { > /* Allocate just one element for every 9/10 iteration */ > pt2 = (int *)malloc((1)*sizeof(int)); > } > /* Put in data and print it */ > pt2[0] = ii; > printf(" Found value %i\n",pt2[0]); > /* Free the memory - note that the peak */ > free(pt2); > > /* Spend time on "something" - the actual work does not matter*/ > ac = 1; > for (jj=0;jj<10000*(1 + ii);jj++) { > ac += sin(jj*0.01) + cos(jj*0.01 + 0.3); > } > printf(" Found dummy value %f\n",ac); > /* Free the memory */ > free(pt); > } > printf("I made %i memory peaks\n",numberOfPeaks); > return 0; > } > > > -- > Peter Toft <p...@linuxbog.dk> > > ------------------------------------------------------------------------------ > _______________________________________________ > Valgrind-users mailing list > Valgrind-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/valgrind-users ------------------------------------------------------------------------------ _______________________________________________ Valgrind-users mailing list Valgrind-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/valgrind-users