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

Reply via email to