Perfect - nothing less :-) --- Peter Toft <p...@linuxbog.dk>
Peter Bortas skrev den 2015-06-08 15:06: > 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