ucc::memalloc Class Reference

An alternate memory pager private heap manager. More...

#include <memory.h>

Inheritance diagram for ucc::memalloc:

Inheritance graph
[legend]

Public Member Functions

 memalloc (size_t page=0)
 Construct a memory pager.
virtual ~memalloc ()
 Destroy a memory pager.
unsigned getPages (void)
 Get the number of pages that have been allocated from the real heap.
unsigned getLimit (void)
 Get the maximum number of pages that are permitted.
unsigned getAlloc (void)
 Get the size of a memory page.
unsigned utilization (void)
 Determine fragmentation level of acquired heap pages.
void purge (void)
 Purge all allocated memory and heap pages immediately.
virtual void * alloc (size_t size)
 Allocate memory from the pager heap.
void * zalloc (size_t size)
 Allocate memory from the pager heap.
char * dup (const char *string)
 Duplicate NULL terminated string into allocated memory.
void * dup (void *memory, size_t size)
 Duplicate existing memory block into allocated memory.

Protected Member Functions

page_t * pager (void)
 Acquire a new page from the heap.

Protected Attributes

unsigned limit

Detailed Description

An alternate memory pager private heap manager.

This is used to allocate in an optimized manner, as it assumes no mutex locks are held or used as part of it's own internal processing. It also is designed for optimized performance.

Author:
David Sugar <dyfet@gnutelephony.org>

Definition at line 48 of file memory.h.


Constructor & Destructor Documentation

ucc::memalloc::memalloc ( size_t  page = 0  ) 

Construct a memory pager.

Parameters:
page size to use or 0 for OS allocation size.

virtual ucc::memalloc::~memalloc (  )  [virtual]

Destroy a memory pager.

Release all pages back to the heap at once.


Member Function Documentation

virtual void* ucc::memalloc::alloc ( size_t  size  )  [virtual]

Allocate memory from the pager heap.

The size of the request must be less than the size of the memory page used.

Parameters:
size of memory request.
Returns:
allocated memory or NULL if not possible.

Reimplemented in ucc::mempager.

void* ucc::memalloc::dup ( void *  memory,
size_t  size 
)

Duplicate existing memory block into allocated memory.

Parameters:
memory to data copy from.
size of memory to allocate.
Returns:
allocated memory with copy or NULL if cannot allocate.

Reimplemented in ucc::mempager.

char* ucc::memalloc::dup ( const char *  string  ) 

Duplicate NULL terminated string into allocated memory.

Parameters:
string to copy into memory.
Returns:
allocated memory with copy of string or NULL if cannot allocate.

Reimplemented in ucc::mempager.

unsigned ucc::memalloc::getAlloc ( void   )  [inline]

Get the size of a memory page.

Returns:
size of each pager heap allocation.

Definition at line 106 of file memory.h.

unsigned ucc::memalloc::getLimit ( void   )  [inline]

Get the maximum number of pages that are permitted.

One can use a derived class to set and enforce a maximum limit to the number of pages that will be allocated from the real heap. This is often used to detect and bring down apps that are leaking.

Returns:
page allocation limit.

Definition at line 99 of file memory.h.

unsigned ucc::memalloc::getPages ( void   )  [inline]

Get the number of pages that have been allocated from the real heap.

Returns:
pages allocated from heap.

Reimplemented in ucc::assoc_pointer< T, I, M, P >.

Definition at line 89 of file memory.h.

page_t* ucc::memalloc::pager ( void   )  [protected]

Acquire a new page from the heap.

This is mostly used internally.

Returns:
page structure of the newly aquired memory page.

unsigned ucc::memalloc::utilization ( void   ) 

Determine fragmentation level of acquired heap pages.

This is represented as an average % utilization (0-100) and represents the used portion of each allocated heap page vs the page size. Since requests that cannot fit on an already allocated page are moved into a new page, there is some unusable space left over at the end of the page. When utilization approaches 100, this is good. A low utilization may suggest a larger page size should be used.

Returns:
pager utilization.

Reimplemented in ucc::mempager, and ucc::assoc_pointer< T, I, M, P >.

void* ucc::memalloc::zalloc ( size_t  size  ) 

Allocate memory from the pager heap.

The size of the request must be less than the size of the memory page used. The memory is initialized to zero.

Parameters:
size of memory request.
Returns:
allocated memory or NULL if not possible.

Reimplemented in ucc::mempager.


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

Generated on Wed May 13 08:43:13 2009 for UCommon by  doxygen 1.5.7.1