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 () |
virtual TClass * | IsA () const |
virtual void | Streamer (TBuffer &) |
void | StreamerNVirtual (TBuffer &ClassDef_StreamerNVirtual_b) |
Static Public Member Functions | |
static void * | Alloc (size_t size) |
Allocate a block of memory, that later can be resized using TStorage::ReAlloc(). | |
static TClass * | Class () |
static const char * | Class_Name () |
static constexpr Version_t | Class_Version () |
static void | Dealloc (void *ptr) |
De-allocate block of memory, that was allocated via TStorage::Alloc(). | |
static const char * | DeclFileName () |
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 size_t | GetMaxBlockSize () |
static Bool_t | HasCustomNewDelete () |
return the has custom delete flag | |
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, 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 |
#include <TStorage.h>
|
private |
Enumerator | |
---|---|
kIsOnHeap | object is on heap |
Definition at line 43 of file TStorage.h.
|
inlinevirtual |
Definition at line 52 of file TStorage.h.
|
static |
Allocate a block of memory, that later can be resized using TStorage::ReAlloc().
Definition at line 152 of file TStorage.cxx.
|
static |
|
inlinestaticconstexpr |
Definition at line 85 of file TStorage.h.
|
static |
De-allocate block of memory, that was allocated via TStorage::Alloc().
Definition at line 170 of file TStorage.cxx.
|
inlinestatic |
Definition at line 85 of file TStorage.h.
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 412 of file TStorage.cxx.
|
static |
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 88 of file TStorage.h.
|
inlinestatic |
Definition at line 135 of file TStorage.h.
|
static |
return static free hook data
Definition at line 426 of file TStorage.cxx.
|
inlinestatic |
Definition at line 131 of file TStorage.h.
|
static |
return the has custom delete flag
Definition at line 434 of file TStorage.cxx.
|
inlinevirtual |
Definition at line 85 of file TStorage.h.
|
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 291 of file TStorage.cxx.
|
static |
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 314 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 303 of file TStorage.cxx.
|
static |
Used to deallocate a TObject on the heap (via TObject::operator delete()).
Definition at line 322 of file TStorage.cxx.
|
static |
Used to deallocate a TObject on the heap (via TObject::operator delete(void*,void*)).
Definition at line 331 of file TStorage.cxx.
|
static |
Print memory usage statistics.
Definition at line 368 of file TStorage.cxx.
|
static |
Reallocate (i.e.
resize) block of memory. Checks if current size is equal to oldsize. If not memory was overwritten.
Definition at line 183 of file TStorage.cxx.
|
static |
Reallocate (i.e.
resize) array of chars. Size and oldsize are in number of chars.
Definition at line 228 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 258 of file TStorage.cxx.
|
static |
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 442 of file TStorage.cxx.
|
static |
Set a free handler.
Definition at line 350 of file TStorage.cxx.
|
inlinestatic |
Definition at line 133 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 360 of file TStorage.cxx.
|
virtual |
|
inline |
Definition at line 85 of file TStorage.h.
|
static |
Definition at line 123 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 40 of file TStorage.h.
|
staticprivate |
Definition at line 36 of file TStorage.h.
|
staticprivate |
Definition at line 39 of file TStorage.h.
|
static |
Definition at line 48 of file TStorage.h.