Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "cmtkMemory.h"
00034
00035 #ifdef HAVE_MALLOC_H
00036 # include <malloc.h>
00037 #endif
00038
00039 #include <stdio.h>
00040 #include <limits.h>
00041
00042 namespace
00043 cmtk
00044 {
00045
00046 namespace
00047 Memory
00048 {
00049
00050 size_t
00051 GetNextPowerOfTwo( size_t k )
00052 {
00053
00054
00055
00056 if (k == 0)
00057 return 1;
00058
00059 k--;
00060 for (size_t i=1; i<sizeof(size_t)*CHAR_BIT; i<<=1)
00061 k = k | k >> i;
00062
00063 return k+1;
00064 }
00065
00066 size_t
00067 Used ()
00068 {
00069 #ifdef HAVE_MALLINFO
00070 struct mallinfo stats = mallinfo();
00071 return stats.uordblks + stats.usmblks;
00072 #else
00073 return 0;
00074 #endif
00075 }
00076
00077 void
00078 Info ( const char *msg )
00079 {
00080 const int used = Used();
00081 if (msg )
00082 printf("%d bytes in use %s\n",used,msg);
00083 else
00084 printf("%d bytes in use.\n",used);
00085 }
00086
00087 void
00088 Diff ( const size_t before, const char *msg )
00089 {
00090 const int diff = Used()-before;
00091 if (diff<0)
00092 printf("%s freed %d bytes.\n",msg,-diff);
00093 else
00094 printf("%s allocated %d bytes.\n",msg,diff);
00095 }
00096
00097 }
00098
00099 }