Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType > Class Template Reference

#include <hoardmanager.h>

Inheritance diagram for Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >:
BaseHoardManager< SuperblockType_ >

List of all members.

Classes

class  sanityCheck

Public Types

enum  { Alignment = sizeof(double) }
 

This heap guarantees only double-word alignment.

More...
typedef SuperblockType_ SuperblockType

Public Member Functions

 HoardManager (void)
virtual ~HoardManager (void)
MALLOC_FUNCTION INLINE void * malloc (size_t sz)
NO_INLINE void put (SuperblockType *s, size_t sz)
 Put a superblock on this heap.
NO_INLINE SuperblockTypeget (size_t sz, HeapType *dest)
 Get an empty (or nearly-empty) superblock.
INLINE void free (void *ptr)
 Return one object to its superblock and update stats.
INLINE void lock (void)
 Lock this memory manager.
INLINE void unlock (void)
 Unlock this memory manager.
NO_INLINE void * getAnotherSuperblock (size_t sz)

Private Types

enum  { SuperblockSize = sizeof(SuperblockType_) }
enum  { MAGIC_NUMBER = 0xfeeddadd }
enum  { NumBins = binType::NUM_BINS }
 

How many bins do we need to maintain?

More...
typedef BaseHoardManager
< SuperblockType_ > 
SuperHeap
typedef HL::bins< typename
SuperblockType::Header,
SuperblockSize > 
binType
 The type of the bin manager.
typedef SuperblockTypeSuperblockTypePointer
typedef EmptyClass
< SuperblockType,
EmptinessClasses > 
OrganizedByEmptiness
typedef ManageOneSuperblock
< OrganizedByEmptiness
BinManager

Private Member Functions

int isValid (void) const
NO_INLINE void slowPathFree (int binIndex, int u, int a)
NO_INLINE void unlocked_put (SuperblockType *s, size_t sz)
void addStatsSuperblock (SuperblockType *s, int binIndex)
void decStatsSuperblock (SuperblockType *s, int binIndex)
MALLOC_FUNCTION NO_INLINE void * slowPathMalloc (size_t sz)
MALLOC_FUNCTION INLINE void * getObject (int binIndex, size_t sz)
 Get one object of a particular size.

Private Attributes

HL::sassert<((SuperblockSize
&(SuperblockSize-1))==0)> 
verifyPowerOfTwo
 Ensure that the superblock size is a power of two.
const unsigned long _magic
 A magic number used for debugging.
sassert< sizeof(typename
SuperblockType::Header)%sizeof(double)==0 > 
verifyHeaderRightSize
LockType _theLock
Array< NumBins, Statistics_stats
 Usage statistics for each bin.
Array< NumBins, BinManager_otherBins
 Bins that hold superblocks for each size class.
ParentHeap _ph
 The parent heap.
SourceHeap _sourceHeap
 Where memory comes from.

Friends

class sanityCheck

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
class Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >


Member Typedef Documentation

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
typedef ManageOneSuperblock<OrganizedByEmptiness> Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::BinManager [private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
typedef HL::bins<typename SuperblockType::Header, SuperblockSize> Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::binType [private]

The type of the bin manager.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
typedef EmptyClass<SuperblockType, EmptinessClasses> Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::OrganizedByEmptiness [private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
typedef SuperblockType_ Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::SuperblockType
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
typedef SuperblockType* Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::SuperblockTypePointer [private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
typedef BaseHoardManager<SuperblockType_> Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::SuperHeap [private]

Member Enumeration Documentation

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
anonymous enum

This heap guarantees only double-word alignment.

Enumerator:
Alignment 
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
anonymous enum [private]
Enumerator:
SuperblockSize 
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
anonymous enum [private]
Enumerator:
MAGIC_NUMBER 
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
anonymous enum [private]

How many bins do we need to maintain?

Enumerator:
NumBins 

Constructor & Destructor Documentation

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::HoardManager ( void   )  [inline]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
virtual Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::~HoardManager ( void   )  [inline, virtual]

Member Function Documentation

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
void Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::addStatsSuperblock ( SuperblockType s,
int  binIndex 
) [inline, private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
void Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::decStatsSuperblock ( SuperblockType s,
int  binIndex 
) [inline, private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
INLINE void Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::free ( void *  ptr  )  [inline, virtual]

Return one object to its superblock and update stats.

Reimplemented from BaseHoardManager< SuperblockType_ >.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
NO_INLINE SuperblockType* Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::get ( size_t  sz,
HeapType *  dest 
) [inline]

Get an empty (or nearly-empty) superblock.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
NO_INLINE void* Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::getAnotherSuperblock ( size_t  sz  )  [inline]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
MALLOC_FUNCTION INLINE void* Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::getObject ( int  binIndex,
size_t  sz 
) [inline, private]

Get one object of a particular size.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
int Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::isValid ( void   )  const [inline, private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
INLINE void Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::lock ( void   )  [inline, virtual]

Lock this memory manager.

Reimplemented from BaseHoardManager< SuperblockType_ >.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
MALLOC_FUNCTION INLINE void* Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::malloc ( size_t  sz  )  [inline]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
NO_INLINE void Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::put ( SuperblockType s,
size_t  sz 
) [inline]

Put a superblock on this heap.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
NO_INLINE void Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::slowPathFree ( int  binIndex,
int  u,
int  a 
) [inline, private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
MALLOC_FUNCTION NO_INLINE void* Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::slowPathMalloc ( size_t  sz  )  [inline, private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
INLINE void Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::unlock ( void   )  [inline, virtual]

Unlock this memory manager.

Reimplemented from BaseHoardManager< SuperblockType_ >.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
NO_INLINE void Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::unlocked_put ( SuperblockType s,
size_t  sz 
) [inline, private]

Friends And Related Function Documentation

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
friend class sanityCheck [friend]

Member Data Documentation

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
const unsigned long Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::_magic [private]

A magic number used for debugging.

Reimplemented from BaseHoardManager< SuperblockType_ >.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
Array<NumBins, BinManager> Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::_otherBins [private]

Bins that hold superblocks for each size class.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
ParentHeap Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::_ph [private]

The parent heap.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
SourceHeap Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::_sourceHeap [private]

Where memory comes from.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
Array<NumBins, Statistics> Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::_stats [private]

Usage statistics for each bin.

template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
LockType Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::_theLock [private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
sassert<sizeof(typename SuperblockType::Header) % sizeof(double) == 0> Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::verifyHeaderRightSize [private]
template<class SourceHeap, class ParentHeap, class SuperblockType_, int EmptinessClasses, class LockType, class thresholdFunctionClass, class HeapType>
HL::sassert<((SuperblockSize & (SuperblockSize-1)) == 0)> Hoard::HoardManager< SourceHeap, ParentHeap, SuperblockType_, EmptinessClasses, LockType, thresholdFunctionClass, HeapType >::verifyPowerOfTwo [private]

Ensure that the superblock size is a power of two.


The documentation for this class was generated from the following file:
Generated on Tue Aug 2 11:51:31 2011 for Galois by  doxygen 1.6.3