NAME
ACE_Cached_Mem_Pool_Node -
ACE_Cached_Mem_Pool_Node
keeps unused memory within a free
list.
SYNOPSIS
#include <ace/Malloc_T.h>
template<class T>
class ACE_Cached_Mem_Pool_Node
{
public:
T *addr (void);
ACE_Cached_Mem_Pool_Node<T> *get_next (void);
void set_next (ACE_Cached_Mem_Pool_Node<T> *ptr);
private:
ACE_Cached_Mem_Pool_Node<T> *next_;
};
DESCRIPTION
The length of a piece of unused memory must be greater than
sizeof (void*). This makes sense because we'll waste even
more memory if we keep them in a separate data structure.
This class should really be placed within the next class
ACE_Cached_Allocator
. But this can't be done due to C++
compiler portability problems.
PUBLIC MEMBERS
T *addr (void);
return the address of free memory.
ACE_Cached_Mem_Pool_Node<T> *get_next (void);
get the next ACE_Cached_Mem_Pool_Node in a list.
void set_next (ACE_Cached_Mem_Pool_Node<T> *ptr);
set the next ACE_Cached_Mem_Pool_Node.
PRIVATE MEMBERS
ACE_Cached_Mem_Pool_Node<T> *next_;
Since memory is not used when placed in a free list,
we can use it to maintain the structure of free list.
I was using union to hide the fact of overlapping memory
usage. However, that cause problem on MSVC. So, I now turn
back to hack this with casting.
AUTHOR
Doug Schmidt and Irfan Pyarali
LIBRARY
ace