Loki::FixedAllocator Class Reference

Collaboration diagram for Loki::FixedAllocator:
List of all members.

Public Member Functions

 FixedAllocator ()
 Create a FixedAllocator which manages blocks of 'blockSize' size.
 ~FixedAllocator ()
 Destroy the FixedAllocator and release all its Chunks.
void Initialize (std::size_t blockSize, std::size_t pageSize)
 Initializes a FixedAllocator by calculating # of blocks per Chunk.
void * Allocate (void)
bool Deallocate (void *p, Chunk *hint)
std::size_t BlockSize () const
 Returns block size with which the FixedAllocator was initialized.
bool TrimEmptyChunk (void)
bool TrimChunkList (void)
std::size_t CountEmptyChunks (void) const
bool IsCorrupt (void) const
const ChunkHasBlock (void *p) const
ChunkHasBlock (void *p)

Detailed Description

Offers services for allocating fixed-sized objects. It has a container of "containers" of fixed-size blocks. The outer container has all the Chunks. The inner container is a Chunk which owns some blocks.

Class Level Invariants

Definition at line 168 of file SmallObj.cpp.

Member Function Documentation

void * Loki::FixedAllocator::Allocate ( void   ) 

Returns pointer to allocated memory block of fixed size - or NULL if it failed to allocate.

Definition at line 829 of file SmallObj.cpp.

References Loki::Chunk::Allocate(), CountEmptyChunks(), Loki::Chunk::HasAvailable(), and Loki::Chunk::IsFilled().

Referenced by Loki::SmallObjAllocator::Allocate().

Here is the call graph for this function:

bool Loki::FixedAllocator::Deallocate ( void *  p,
Chunk hint 

Deallocate a memory block previously allocated with Allocate. If the block is not owned by this FixedAllocator, it returns false so that SmallObjAllocator can call the default deallocator. If the block was found, this returns true.

Definition at line 879 of file SmallObj.cpp.

References CountEmptyChunks(), Loki::Chunk::HasBlock(), Loki::Chunk::IsBlockAvailable(), and Loki::Chunk::IsCorrupt().

Referenced by Loki::SmallObjAllocator::Deallocate().

Here is the call graph for this function:

bool Loki::FixedAllocator::TrimEmptyChunk ( void   ) 

Releases the memory used by the empty Chunk. This will take constant time under any situation.

True if empty chunk found and released, false if none empty.

Definition at line 734 of file SmallObj.cpp.

References Loki::Chunk::blocksAvailable_, CountEmptyChunks(), Loki::Chunk::HasAvailable(), and Loki::Chunk::Release().

Referenced by ~FixedAllocator().

Here is the call graph for this function:

bool Loki::FixedAllocator::TrimChunkList ( void   ) 

Releases unused spots from ChunkList. This takes constant time with respect to # of Chunks, but actual time depends on underlying memory allocator.

False if no unused spots, true if some found and released.

Definition at line 779 of file SmallObj.cpp.

std::size_t Loki::FixedAllocator::CountEmptyChunks ( void   )  const

Returns count of empty Chunks held by this allocator. Complexity is O(C) where C is the total number of Chunks - empty or used.

Definition at line 584 of file SmallObj.cpp.

Referenced by Allocate(), Deallocate(), IsCorrupt(), and TrimEmptyChunk().

bool Loki::FixedAllocator::IsCorrupt ( void   )  const

Determines if FixedAllocator is corrupt. Checks data members to see if any have erroneous values, or violate class invariants. It also checks if any Chunk is corrupt. Complexity is O(C) where C is the number of Chunks. If any data is corrupt, this will return true in release mode, or assert in debug mode.

Definition at line 605 of file SmallObj.cpp.

References CountEmptyChunks(), and Loki::Chunk::HasAvailable().

Here is the call graph for this function:

const Chunk * Loki::FixedAllocator::HasBlock ( void *  p  )  const

Returns true if the block at address p is within a Chunk owned by this FixedAllocator. Complexity is O(C) where C is the total number of Chunks - empty or used.

Definition at line 720 of file SmallObj.cpp.

Referenced by HasBlock().

The documentation for this class was generated from the following file:
Generated on Sun Feb 25 16:52:50 2007 for Loki by  doxygen 1.5.1-p1