PTLib  Version 2.14.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PMemoryHeap Class Reference

Memory heap checking class. More...

#include <object.h>

Collaboration diagram for PMemoryHeap:

Classes

struct  Header
 
struct  State
 
class  Wrapper
 

Public Types

enum  Validation { Ok, Bad, Trashed }
 Validation result. More...
 

Public Member Functions

 ~PMemoryHeap ()
 

Static Public Member Functions

static void * Allocate (size_t nSize, const char *file, int line, const char *className)
 Allocate a memory block. More...
 
static void * Allocate (size_t count, size_t iSize, const char *file, int line)
 Allocate a memory block. More...
 
static void * Reallocate (void *ptr, size_t nSize, const char *file, int line)
 Change the size of an allocated memory block. More...
 
static void Deallocate (void *ptr, const char *className)
 Free a memory block. More...
 
static Validation Validate (const void *ptr, const char *className, ostream *error)
 Validate the memory pointer. More...
 
static PBoolean ValidateHeap (ostream *error=NULL)
 Validate all objects in memory. More...
 
static PBoolean SetIgnoreAllocations (PBoolean ignore)
 Ignore/Monitor allocations. More...
 
static void DumpStatistics ()
 Get memory check system statistics. More...
 
static void DumpStatistics (ostream &strm)
 Get memory check system statistics. More...
 
static void GetState (State &state)
 
static void DumpObjectsSince (const State &when)
 Dump allocated objects. More...
 
static void DumpObjectsSince (const State &when, ostream &strm)
 Dump allocated objects. More...
 
static void SetAllocationBreakpoint (DWORD point)
 Set break point allocation number. More...
 

Protected Types

enum  Flags { NoLeakPrint = 1 }
 

Protected Member Functions

 PMemoryHeap ()
 Initialise the memory checking subsystem. More...
 
void * InternalAllocate (size_t nSize, const char *file, int line, const char *className)
 
Validation InternalValidate (const void *ptr, const char *className, ostream *error)
 
void InternalDumpStatistics (ostream &strm)
 
void InternalDumpObjectsSince (DWORD objectNumber, ostream &strm)
 

Protected Attributes

PBoolean isDestroyed
 
HeaderlistHead
 
HeaderlistTail
 
DWORD allocationRequest
 
DWORD firstRealObject
 
BYTE flags
 
char allocFillChar
 
char freeFillChar
 
DWORD currentMemoryUsage
 
DWORD peakMemoryUsage
 
DWORD currentObjects
 
DWORD peakObjects
 
DWORD totalObjects
 
ostream * leakDumpStream
 

Static Protected Attributes

static DWORD allocationBreakpoint
 

Detailed Description

Memory heap checking class.

This class implements the memory heap checking and validation functions. It maintains lists of allocated block so that memory leaks can be detected. It also initialises memory on allocation and deallocation to help catch errors involving the use of dangling pointers.

Member Enumeration Documentation

enum PMemoryHeap::Flags
protected
Enumerator
NoLeakPrint 

Validation result.

Enumerator
Ok 
Bad 
Trashed 

Constructor & Destructor Documentation

PMemoryHeap::PMemoryHeap ( )
protected

Initialise the memory checking subsystem.

PMemoryHeap::~PMemoryHeap ( )

Member Function Documentation

static void* PMemoryHeap::Allocate ( size_t  nSize,
const char *  file,
int  line,
const char *  className 
)
static

Allocate a memory block.

This allocates a new memory block and keeps track of it. The memory block is filled with the value in the allocFillChar member variable to help detect uninitialised structures.

Returns
pointer to newly allocated memory block.
Parameters
nSizeNumber of bytes to allocate.
fileSource file name for allocating function.
lineSource file line for allocating function.
classNameClass name for allocating function.

Referenced by operator new(), and operator new[]().

static void* PMemoryHeap::Allocate ( size_t  count,
size_t  iSize,
const char *  file,
int  line 
)
static

Allocate a memory block.

This allocates a new memory block and keeps track of it. The memory block is filled with the value in the allocFillChar member variable to help detect uninitialised structures.

Returns
pointer to newly allocated memory block.
Parameters
countNumber of items to allocate.
iSizeSize in bytes of each item.
fileSource file name for allocating function.
lineSource file line for allocating function.
static void PMemoryHeap::Deallocate ( void *  ptr,
const char *  className 
)
static

Free a memory block.

The memory is deallocated, a warning is displayed if it was never allocated. The block of memory is filled with the value in the freeFillChar member variable.

Parameters
ptrPointer to memory block to deallocate.
classNameClass name for deallocating function.
static void PMemoryHeap::DumpObjectsSince ( const State when)
static

Dump allocated objects.

Dump ojects allocated and not deallocated since the specified object number. This would be a value returned by the GetAllocationRequest() function.

Output is to the default stream.

Parameters
whenMemory state to begin dump from.
static void PMemoryHeap::DumpObjectsSince ( const State when,
ostream &  strm 
)
static

Dump allocated objects.

Dump ojects allocated and not deallocated since the specified object number. This would be a value returned by the GetAllocationRequest() function.

Parameters
whenMemory state to begin dump from.
strmStream to output dump
static void PMemoryHeap::DumpStatistics ( )
static

Get memory check system statistics.

Dump statistics output to the default stream.

static void PMemoryHeap::DumpStatistics ( ostream &  strm)
static

Get memory check system statistics.

Dump statistics output to the specified stream.

Parameters
strmStream to output to
static void PMemoryHeap::GetState ( State state)
static
Parameters
stateMemory state
void* PMemoryHeap::InternalAllocate ( size_t  nSize,
const char *  file,
int  line,
const char *  className 
)
protected
void PMemoryHeap::InternalDumpObjectsSince ( DWORD  objectNumber,
ostream &  strm 
)
protected
void PMemoryHeap::InternalDumpStatistics ( ostream &  strm)
protected
Validation PMemoryHeap::InternalValidate ( const void *  ptr,
const char *  className,
ostream *  error 
)
protected
static void* PMemoryHeap::Reallocate ( void *  ptr,
size_t  nSize,
const char *  file,
int  line 
)
static

Change the size of an allocated memory block.

This allocates a new memory block and keeps track of it. The memory block is filled with the value in the allocFillChar member variable to help detect uninitialised structures.

Returns
pointer to reallocated memory block. Note this may {not} be the same as the pointer passed into the function.
Parameters
ptrPointer to memory block to reallocate.
nSizeNew number of bytes to allocate.
fileSource file name for allocating function.
lineSource file line for allocating function.
static void PMemoryHeap::SetAllocationBreakpoint ( DWORD  point)
static

Set break point allocation number.

Set the allocation request number to cause an assert. This allows a developer to cause a halt in a debugger on a certain allocation allowing them to determine memory leaks allocation point.

Parameters
pointAllocation number to stop at.

Referenced by PMemoryAllocationBreakpoint::PMemoryAllocationBreakpoint().

static PBoolean PMemoryHeap::SetIgnoreAllocations ( PBoolean  ignore)
static

Ignore/Monitor allocations.

Set internal flag so that allocations are not included in the memory leak check on program termination. Returns the previous state.

Parameters
ignoreNew flag for allocation ignoring.

Referenced by PMemoryHeapIgnoreAllocationsForScope::~PMemoryHeapIgnoreAllocationsForScope().

static Validation PMemoryHeap::Validate ( const void *  ptr,
const char *  className,
ostream *  error 
)
static

Validate the memory pointer.

The ptr parameter is validated as a currently allocated heap variable.

Returns
Ok for pointer is in heap, Bad for pointer is not in the heap or Trashed if the pointer is in the heap but has overwritten the guard bytes before or after the actual data part of the memory block.
Parameters
ptrPointer to memory block to check
classNameClass name it should be.
errorStream to receive error message (may be NULL)

Referenced by PSingleton< std::allocator< Type > >::PSingleton().

static PBoolean PMemoryHeap::ValidateHeap ( ostream *  error = NULL)
static

Validate all objects in memory.

This effectively calls Validate() on every object in the heap.

Returns
true if every object in heap is Ok.
Parameters
errorStream to output, use default if NULL

Member Data Documentation

DWORD PMemoryHeap::allocationBreakpoint
staticprotected
DWORD PMemoryHeap::allocationRequest
protected
char PMemoryHeap::allocFillChar
protected
DWORD PMemoryHeap::currentMemoryUsage
protected
DWORD PMemoryHeap::currentObjects
protected
DWORD PMemoryHeap::firstRealObject
protected
BYTE PMemoryHeap::flags
protected
char PMemoryHeap::freeFillChar
protected
PBoolean PMemoryHeap::isDestroyed
protected
ostream* PMemoryHeap::leakDumpStream
protected
Header* PMemoryHeap::listHead
protected
Header* PMemoryHeap::listTail
protected
DWORD PMemoryHeap::peakMemoryUsage
protected
DWORD PMemoryHeap::peakObjects
protected
DWORD PMemoryHeap::totalObjects
protected

The documentation for this class was generated from the following file: