Storage manager.
The storage manager works best in conjunction with the custom ROOT new and delete operators defined in the file NewDelete.cxx (libNew.so). Only when using the custom allocation operators will memory usage statistics be gathered using the TStorage EnterStat(), RemoveStat(), etc. functions. Memory checking is by default enabled (when using libNew.so) and usage statistics is gathered. Using the resource (in .rootrc): Root.MemStat one can toggle statistics gathering on or off. More specifically on can trap the allocation of a block of memory of a certain size. This can be specified using the resource: Root.MemStat.size, using the resource Root.MemStat.cnt one can specify after how many allocations of this size the trap should occur.
Set the compile option R__NOSTATS to de-activate all memory checking and statistics gathering in the system.
Definition at line 33 of file TStorage.h.
Public Member Functions | |
virtual | ~TStorage () |
Static Public Member Functions | |
static void | AddToHeap (ULong_t begin, ULong_t end) |
add a range to the heap | |
static void * | Alloc (size_t size) |
Allocate a block of memory, that later can be resized using TStorage::ReAlloc(). | |
static void | Dealloc (void *ptr) |
De-allocate block of memory, that was allocated via TStorage::Alloc(). | |
static void | EnableStatistics (int size=-1, int ix=-1) |
Enable memory usage statistics gathering. | |
static void | EnterStat (size_t size, void *p) |
Register a memory allocation operation. | |
static Bool_t | FilledByObjectAlloc (volatile const UInt_t *const member) |
static FreeHookFun_t | GetFreeHook () |
static void * | GetFreeHookData () |
return static free hook data | |
static ULong_t | GetHeapBegin () |
static ULong_t | GetHeapEnd () |
static size_t | GetMaxBlockSize () |
static Bool_t | HasCustomNewDelete () |
return the has custom delete flag | |
static Bool_t | IsOnHeap (void *p) |
is object at p in the heap? | |
static void * | ObjectAlloc (size_t size) |
Used to allocate a TObject on the heap (via TObject::operator new()). | |
static void * | ObjectAlloc (size_t size, void *vp) |
Used to allocate a TObject on the heap (via TObject::operator new(size_t,void*)) in position vp. | |
static void * | ObjectAllocArray (size_t size) |
Used to allocate array of TObject on the heap (via TObject::operator new[]()). | |
static void | ObjectDealloc (void *vp) |
Used to deallocate a TObject on the heap (via TObject::operator delete()). | |
static void | ObjectDealloc (void *vp, void *ptr) |
Used to deallocate a TObject on the heap (via TObject::operator delete(void*,void*)). | |
static void | PrintStatistics () |
Print memory usage statistics. | |
static void * | ReAlloc (void *vp, size_t size) |
Reallocate (i.e. | |
static void * | ReAlloc (void *vp, size_t size, size_t oldsize) |
Reallocate (i.e. | |
static char * | ReAllocChar (char *vp, size_t size, size_t oldsize) |
Reallocate (i.e. | |
static Int_t * | ReAllocInt (Int_t *vp, size_t size, size_t oldsize) |
Reallocate (i.e. | |
static void | RemoveStat (void *p) |
Register a memory free operation. | |
static void | SetCustomNewDelete () |
set the has custom delete flag | |
static void | SetFreeHook (FreeHookFun_t func, void *data) |
Set a free handler. | |
static void | SetMaxBlockSize (size_t size) |
static void | SetReAllocHooks (ReAllocFun_t func1, ReAllocCFun_t func2) |
Set a custom ReAlloc handlers. | |
static void | UpdateIsOnHeap (volatile const UInt_t &uniqueID, volatile UInt_t &bits) |
Static Public Attributes | |
static const UInt_t | kObjectAllocMemValue = 0x99999999 |
Private Types | |
enum | { kIsOnHeap = 0x01000000 } |
Static Private Attributes | |
static FreeHookFun_t | fgFreeHook |
static void * | fgFreeHookData |
static Bool_t | fgHasCustomNewDelete |
static size_t | fgMaxBlockSize |
static ReAllocCFun_t | fgReAllocCHook |
static ReAllocFun_t | fgReAllocHook |
#include <TStorage.h>
|
private |
Enumerator | |
---|---|
kIsOnHeap | object is on heap |
Definition at line 44 of file TStorage.h.
|
inlinevirtual |
Definition at line 53 of file TStorage.h.
add a range to the heap
Definition at line 507 of file TStorage.cxx.
|
static |
Allocate a block of memory, that later can be resized using TStorage::ReAlloc().
Definition at line 152 of file TStorage.cxx.
De-allocate block of memory, that was allocated via TStorage::Alloc().
Definition at line 170 of file TStorage.cxx.
Enable memory usage statistics gathering.
Size is the size of the memory block that should be trapped and ix is after how many such allocations the trap should happen.
Definition at line 450 of file TStorage.cxx.
Register a memory allocation operation.
If desired one can trap an allocation of a certain size in case one tries to find a memory leak of that particular size. This function is only called via the ROOT custom new operators.
Definition at line 99 of file TStorage.cxx.
Definition at line 96 of file TStorage.h.
|
inlinestatic |
Definition at line 143 of file TStorage.h.
|
static |
return static free hook data
Definition at line 482 of file TStorage.cxx.
|
static |
Definition at line 463 of file TStorage.cxx.
|
static |
Definition at line 472 of file TStorage.cxx.
|
inlinestatic |
Definition at line 139 of file TStorage.h.
|
static |
return the has custom delete flag
Definition at line 490 of file TStorage.cxx.
is object at p in the heap?
Definition at line 515 of file TStorage.cxx.
|
static |
Used to allocate a TObject on the heap (via TObject::operator new()).
Directly after this routine one can call (in the TObject ctor) TStorage::FilledByObjectAlloc() to find out if the just created object is on the heap. This technique is necessary as there is one stack per thread and we can not rely on comparison with the current stack memory position.
Definition at line 328 of file TStorage.cxx.
Used to allocate a TObject on the heap (via TObject::operator new(size_t,void*)) in position vp.
vp is already allocated (maybe on heap, maybe on stack) so just return.
Definition at line 351 of file TStorage.cxx.
|
static |
Used to allocate array of TObject on the heap (via TObject::operator new[]()).
Unlike the 'singular' ObjectAlloc, we do not mark those object has being allocated on the heap as they can not be individually deleted.
Definition at line 340 of file TStorage.cxx.
Used to deallocate a TObject on the heap (via TObject::operator delete()).
Definition at line 359 of file TStorage.cxx.
Used to deallocate a TObject on the heap (via TObject::operator delete(void*,void*)).
Definition at line 368 of file TStorage.cxx.
|
static |
Print memory usage statistics.
Definition at line 406 of file TStorage.cxx.
Reallocate (i.e.
resize) block of memory. Don't use if size is larger than old size, use ReAlloc(void *, size_t, size_t) instead.
Definition at line 183 of file TStorage.cxx.
Reallocate (i.e.
resize) block of memory. Checks if current size is equal to oldsize. If not memory was overwritten.
Definition at line 222 of file TStorage.cxx.
|
static |
Reallocate (i.e.
resize) array of chars. Size and oldsize are in number of chars.
Definition at line 265 of file TStorage.cxx.
Reallocate (i.e.
resize) array of integers. Size and oldsize are number of integers (not number of bytes).
Definition at line 295 of file TStorage.cxx.
Register a memory free operation.
This function is only called via the custom ROOT delete operator.
Definition at line 129 of file TStorage.cxx.
|
static |
set the has custom delete flag
Definition at line 498 of file TStorage.cxx.
|
static |
Set a free handler.
Definition at line 387 of file TStorage.cxx.
|
inlinestatic |
Definition at line 141 of file TStorage.h.
|
static |
Set a custom ReAlloc handlers.
This function is typically called via a static object in the ROOT libNew.so shared library.
Definition at line 397 of file TStorage.cxx.
|
static |
Definition at line 131 of file TStorage.h.
|
staticprivate |
Definition at line 37 of file TStorage.h.
|
staticprivate |
Definition at line 38 of file TStorage.h.
|
staticprivate |
Definition at line 41 of file TStorage.h.
|
staticprivate |
Definition at line 36 of file TStorage.h.
|
staticprivate |
Definition at line 40 of file TStorage.h.
|
staticprivate |
Definition at line 39 of file TStorage.h.
|
static |
Definition at line 49 of file TStorage.h.