Reference

ACE_Cached_Mem_Pool_Node(3)

ACE_Cached_Mem_Pool_Node keeps unused memory within a free list.

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