42 #if !defined(R__NOSTATS) 45 # define MEM_CHECKOBJECTPOINTERS 48 #if defined(MEM_STAT) && !defined(MEM_DEBUG) 54 # define storage_size(p) ((size_t)(((size_t*)p)[-1])) 56 # define storage_size(p) ((size_t)(((int*)p)[-2])) 59 # define storage_size(p) ((size_t)0) 98 if (!gMemStatistics)
return;
107 if (gTraceIndex >= gTraceCapacity) {
108 gTraceCapacity = gTraceCapacity*2;
111 gTraceArray[gTraceIndex++] = p;
113 if (size >= kObjMaxSize)
117 gAllocatedTotal += size;
149 static const char *where =
"TStorage::Alloc";
152 void *vp = ::operator
new[](size);
154 void *vp = ::operator
new(size);
168 ::operator
delete[](ptr);
170 ::operator
delete(ptr);
180 ::Obsolete(
"ReAlloc(void*,size_t)",
"v5-34-00",
"v6-02-00");
181 ::Info(
"ReAlloc(void*,size_t)",
"please use ReAlloc(void*,size_t,size_t)");
191 static const char *where =
"TStorage::ReAlloc";
194 void *vp = ::operator
new[](size);
196 void *vp = ::operator
new(size);
204 memmove(vp, ovp, size);
206 ::operator
delete[](ovp);
208 ::operator
delete(ovp);
227 static const char *where =
"TStorage::ReAlloc";
233 void *vp = ::operator
new[](size);
235 void *vp = ::operator
new(size);
243 if (size > oldsize) {
244 memcpy(vp, ovp, oldsize);
245 memset((
char*)vp+oldsize, 0, size-oldsize);
247 memcpy(vp, ovp, size);
249 ::operator
delete[](ovp);
251 ::operator
delete(ovp);
262 static const char *where =
"TStorage::ReAllocChar";
277 if (size > oldsize) {
278 memcpy(vp, ovp, oldsize);
279 memset((
char*)vp+oldsize, 0, size-oldsize);
281 memcpy(vp, ovp, size);
292 static const char *where =
"TStorage::ReAllocInt";
296 vp =
new Int_t[size];
304 vp =
new Int_t[size];
307 if (size > oldsize) {
308 memcpy(vp, ovp, oldsize*
sizeof(
Int_t));
309 memset((
Int_t*)vp+oldsize, 0, (size-oldsize)*
sizeof(
Int_t));
311 memcpy(vp, ovp, size*
sizeof(
Int_t));
325 void* space = ::operator
new(sz);
337 void* space = ::operator
new(sz);
357 ::operator
delete(vp);
368 #ifdef R__SIZEDDELETE 375 #if !defined(R__MACOSX) || !defined(MAC_OS_X_VERSION_10_12) 377 ::operator
delete(vp);
379 ::operator
delete(vp, size);
411 #if defined(MEM_DEBUG) && defined(MEM_STAT) 417 Printf(
"Heap statistics");
418 Printf(
"%12s%12s%12s%12s",
"size",
"alloc",
"free",
"diff");
419 Printf(
"================================================");
429 Printf(
"------------------------------------------------");
435 Printf(
"------------------------------------------------");
440 Printf(
"================================================");
457 int idum = size;
int iidum = ix;
465 ::Obsolete(
"GetHeapBegin()",
"v5-34-00",
"v6-02-00");
474 ::Obsolete(
"GetHeapBegin()",
"v5-34-00",
"v6-02-00");
509 ::Obsolete(
"AddToHeap(ULong_t,ULong_t)",
"v5-34-00",
"v6-02-00");
517 ::Obsolete(
"IsOnHeap(void*)",
"v5-34-00",
"v6-02-00");
static void Dealloc(void *ptr)
De-allocate block of memory, that was allocated via TStorage::Alloc().
void *(* ReAllocFun_t)(void *, size_t)
void Fatal(const char *location, const char *msgfmt,...)
static const UInt_t kObjectAllocMemValue
static ULong_t GetHeapBegin()
static Bool_t MemCheck()
Return kTRUE if the memory leak checker is on.
static void * ObjectAlloc(size_t size)
Used to allocate a TObject on the heap (via TObject::operator new()).
static const char * gSpaceErr
static ULong_t GetHeapEnd()
void Obsolete(const char *function, const char *asOfVers, const char *removedFromVers)
Use this function to declare a function obsolete.
static ReAllocCFun_t fgReAllocCHook
static void AddToHeap(ULong_t begin, ULong_t end)
add a range to the heap
static char * ReAllocChar(char *vp, size_t size, size_t oldsize)
Reallocate (i.e.
static void * fgFreeHookData
void Info(const char *location, const char *msgfmt,...)
static Bool_t fgHasCustomNewDelete
static size_t GetMaxBlockSize()
R__EXTERN TVirtualMutex * gGlobalMutex
static Bool_t gMemStatistics
static void * GetFreeHookData()
return static free hook data
static FreeHookFun_t GetFreeHook()
static void EnableStatistics(int size=-1, int ix=-1)
Enable memory usage statistics gathering.
static Bool_t HasCustomNewDelete()
return the has custom delete flag
static void SetCustomNewDelete()
set the has custom delete flag
static Int_t gAllocatedTotal
static FreeHookFun_t fgFreeHook
static void SetReAllocHooks(ReAllocFun_t func1, ReAllocCFun_t func2)
Set a custom ReAlloc handlers.
static void * Alloc(size_t size)
Allocate a block of memory, that later can be resized using TStorage::ReAlloc().
static Int_t gAllocated[kObjMaxSize]
static void SetFreeHook(FreeHookFun_t func, void *data)
Set a free handler.
static Bool_t IsOnHeap(void *p)
is object at p in the heap?
void *(* ReAllocCFun_t)(void *, size_t, size_t)
#define R__LOCKGUARD(mutex)
static Int_t gFreed[kObjMaxSize]
static void * ReAlloc(void *vp, size_t size)
Reallocate (i.e.
void(* FreeHookFun_t)(void *, void *addr, size_t)
typedef void((*Func_t)())
static void RemoveStat(void *p)
Register a memory free operation.
Short_t Max(Short_t a, Short_t b)
static void SetMaxBlockSize(size_t size)
static Int_t gTraceCapacity
static void * ObjectAllocArray(size_t size)
Used to allocate array of TObject on the heap (via TObject::operator new[]()).
static Bool_t FilledByObjectAlloc(UInt_t *member)
static void ** gTraceArray
static ReAllocFun_t fgReAllocHook
static size_t fgMaxBlockSize
static void ObjectDealloc(void *vp)
Used to deallocate a TObject on the heap (via TObject::operator delete()).
static void PrintStatistics()
Print memory usage statistics.
static Int_t * ReAllocInt(Int_t *vp, size_t size, size_t oldsize)
Reallocate (i.e.