Zen API
 All Classes Files Functions Variables Typedefs Friends Macros Modules Pages
kPoolAlloc Class Reference

Description

Allocates small buffers from larger blocks and/or caches deallocated buffers for later reuse.

This memory allocator can be used to improve performance in some circumstances. It can reduce the number of individual requests to an underlying allocator by allocating multiple small memory buffers from larger blocks. It can also cache deallocated buffers for later reuse, reducing the frequency of allocation requests made to the underlying allocator.

For each memory request, a 'rank' is determined by calculating the base-2 logarithm of the requested size and then rounding up. The rank determines the true size of the buffer that will be allocated (requests are rounded up to the nearest power of two). Rank-based buffer management provides simple organization and fast reallocation; the cost is increased memory space.

Parameters are provided to control which ranks should be allocated from larger blocks, which ranks should be cached upon deallocation, memory capacities, etc. Memory can be reserved using the kPoolAlloc_Reserve and kPoolAlloc_ReserveAt functions, and/or dynamically allocated from the underlying allocator as needed.

The operations provided in this class should be used in the following order:

  • Construct a kPoolAlloc instance.
  • Perform configuration.
  • Use the kPoolAlloc_Start method to prepare the allocator for use.
  • Use the kPoolAlloc_Reserve or kPoolAlloc_ReserveAt methods to make pre-emptive allocations.
  • Use the kAlloc_Get/kAlloc_Free methods to perform allocations/deallocations.
  • Destroy the kPoolAlloc instance when no longer needed.

All outstanding memory allocations must be freed before destroying the allocator.

Inheritance diagram for kPoolAlloc:
Inheritance graph

Public Member Functions

kSize kPoolAlloc_BlockCapacity (kPoolAlloc object)
 Returns the maximum amount of memory that can be used for block-based allocations. More...
 
kBool kPoolAlloc_BlockReuseEnabled (kPoolAlloc object)
 Reports whether blocks can be reused between ranks. More...
 
kSize kPoolAlloc_BlockSize (kPoolAlloc object)
 Returns the approximate size of large memory blocks used to satisfy small memory requests. More...
 
kSize kPoolAlloc_BufferCountAt (kPoolAlloc object, kSize rank)
 Reports the total number of memory buffers at the given rank. More...
 
kSize kPoolAlloc_CacheCapacity (kPoolAlloc object)
 Returns the maximum total amount of memory that can be used to cache buffers upon deallocation. More...
 
kStatus kPoolAlloc_Clear (kPoolAlloc object)
 Returns surplus memory to the underlying allocator. More...
 
kStatus kPoolAlloc_ClearAll (kPoolAlloc object)
 Removes any existing memory reservations and returns surplus memory to the underlying allocator. More...
 
kStatus kPoolAlloc_Construct (kPoolAlloc *object, kAlloc allocator)
 Constructs a kPoolAlloc object. More...
 
kStatus kPoolAlloc_EnableBlockReuse (kPoolAlloc object, kBool enabled)
 Determines whether blocks can be reused between ranks. More...
 
kSize kPoolAlloc_MaxBlockBufferSize (kPoolAlloc object)
 Returns the size limit for memory requests that can be allocated from larger blocks. More...
 
kSize kPoolAlloc_MaxCachedBufferSize (kPoolAlloc object)
 Returns the size limit for memory requests that can be cached upon deallocation. More...
 
kStatus kPoolAlloc_Reserve (kPoolAlloc object, kSize size)
 Specifies the minimum amount of memory that should be set aside for blocks. More...
 
kStatus kPoolAlloc_ReserveAt (kPoolAlloc object, kSize rank, kSize size)
 Specifies the minimum amount of memory that should be set aside at a particular rank. More...
 
kStatus kPoolAlloc_SetBlockCapacity (kPoolAlloc object, kSize size)
 Sets the maximum total amount of memory that can be used for block-based allocations. More...
 
kStatus kPoolAlloc_SetBlockSize (kPoolAlloc object, kSize size)
 Sets the approximate size of large memory blocks used to satisfy small memory requests. More...
 
kStatus kPoolAlloc_SetCacheCapacity (kPoolAlloc object, kSize size)
 Sets the maximum total amount of memory that can be used to cache buffers upon deallocation. More...
 
kStatus kPoolAlloc_SetMaxBlockBufferSize (kPoolAlloc object, kSize size)
 Sets the size limit for memory requests that can be allocated from larger blocks. More...
 
kStatus kPoolAlloc_SetMaxCachedBufferSize (kPoolAlloc object, kSize size)
 Sets the size limit for memory requests that can be cached upon deallocation. More...
 
kStatus kPoolAlloc_SetTotalCapacity (kPoolAlloc object, kSize size)
 Sets the total amount of memory that can be requested from the underlying allocator. More...
 
kStatus kPoolAlloc_Start (kPoolAlloc object)
 Prepares the allocator for first use. More...
 
kSize kPoolAlloc_TotalCapacity (kPoolAlloc object)
 Returns the total amount of memory that can be requested from the underlying allocator. More...
 
kSize kPoolAlloc_TotalSize (kPoolAlloc object)
 Reports the current amount of memory drawn from the underlying allocator. More...
 
- Public Member Functions inherited from kAlloc
kAlloc kAlloc_App ()
 Gets the allocator that should normally be used by applications to request memory. More...
 
kBool kAlloc_CanGetObject (kAlloc alloc)
 Reports whether this allocator is suitable for allocating objects. More...
 
kAlloc kAlloc_Fallback (kAlloc alloc)
 Returns the passed allocator, or if null, the App allocator. More...
 
kStatus kAlloc_Free (kAlloc alloc, void *mem)
 Frees a block of memory. More...
 
kStatus kAlloc_FreeRef (kAlloc alloc, void *mem)
 Frees a block of memory and sets the memory pointer to kNULL. More...
 
kStatus kAlloc_Get (kAlloc alloc, kSize size, void *mem, kMemoryAlignment alignment)
 Allocates a block of memory. More...
 
kStatus kAlloc_Get (kAlloc alloc, kSize size, void *mem)
 Allocates a block of memory. More...
 
kStatus kAlloc_GetObject (kAlloc alloc, kType type, void *mem)
 Allocates a block of memory large enough for an object of the specified type. More...
 
kStatus kAlloc_GetZero (kAlloc alloc, kSize size, void *mem, kMemoryAlignment alignment)
 Allocates a block of memory and zero-initializes the block. More...
 
kStatus kAlloc_GetZero (kAlloc alloc, kSize size, void *mem)
 Allocates a block of memory and zero-initializes the block. More...
 
kBool kAlloc_IsForeign (kAlloc alloc)
 Reports whether memory will be allocated in a foreign address space. More...
 
kAlloc kAlloc_System ()
 Gets the system allocator. More...
 
kAllocTrait kAlloc_Traits (kAlloc alloc)
 Gets the traits associated with this allocator. More...
 
- Public Member Functions inherited from kObject
kAlloc kObject_Alloc (kObject object)
 Gets the memory allocator associated with this object. More...
 
kAllocTrait kObject_AllocTraits (kObject object)
 Gets the bitset of allocator traits for any allocators used within this object, including aggregated child elements. More...
 
kStatus kObject_Clone (kObject *object, kObject source, kAlloc objectAllocator)
 Constructs a new object by copying an existing object, including any aggregated child elements. More...
 
kStatus kObject_Clone (kObject *object, kObject source, kAlloc objectAllocator, kAlloc valueAllocator, kObject context=kNULL)
 Constructs a new object by copying an existing object, including any aggregated child elements. More...
 
kStatus kObject_Destroy (kObject object)
 Destroys the object. More...
 
kStatus kObject_Dispose (kObject object)
 Destroys the object and any aggregated child elements. More...
 
kBool kObject_Equals (kObject object, kObject other)
 Determines whether the object is equal to another object. More...
 
kBool kObject_HasForeignData (kObject object)
 Reports whether the object, including aggregated child elements, contains any foreign memory references. More...
 
kSize kObject_HashCode (kObject object)
 Gets a hash code representing the state of this object. More...
 
kBool kObject_HasShared (kObject object)
 Reports whether an object or any of its aggregated child elements has a reference count greater than one. More...
 
kBool kObject_Is (kObject object, kType type)
 Determines whether this object is an instance of the specified type. More...
 
kBool kObject_IsShared (kObject object)
 Reports whether the object is currently shared (reference count greater than one). More...
 
kStatus kObject_SetPool (kObject object, kObjectPool pool)
 Sets the object pool associated with this object. More...
 
kStatus kObject_Share (kObject object)
 Increments the reference count associated with this object. More...
 
kSize kObject_Size (kObject object)
 Estimates the memory consumed by this object, including any aggregated child elements. More...
 
kType kObject_Type (kObject object)
 Returns the type of the object. More...
 

Additional Inherited Members

- Protected Member Functions inherited from kAlloc
kStatus kAlloc_Copy (kAlloc destAlloc, void *dest, kAlloc srcAlloc, const void *src, kSize size, kObject context=kNULL)
 Copies memory allocated by one allocator to memory allocated with a different allocator. More...
 
kStatus kAlloc_Init (kAlloc alloc, kType type, kAlloc allocator)
 Protected method called by derived classes to initialize the kAlloc base class. More...
 
kStatus kAlloc_VCopy (kAlloc alloc, kAlloc destAlloc, void *dest, kAlloc srcAlloc, const void *src, kSize size, kObject context)
 Protected virtual method that copies memory. More...
 
kStatus kAlloc_VFree (kAlloc alloc, void *mem)
 Protected virtual method that frees memory. More...
 
kStatus kAlloc_VGet (kAlloc alloc, kSize size, void *mem, kMemoryAlignment alignment)
 Protected virtual method that allocates memory. More...
 
kStatus kAlloc_VRelease (kAlloc alloc)
 Protected virtual method that deallocates any resources owned by the object. More...
 
- Protected Member Functions inherited from kObject
kStatus kObject_FreeMem (kObject object, void *mem)
 Protected method called by derived classes to free memory using the object's allocator. More...
 
kStatus kObject_FreeMemRef (kObject object, void *mem)
 Protected method called by derived classes to free memory (and reset the provided memory pointer to kNULL) using the object's allocator. More...
 
kStatus kObject_GetMem (kObject object, kSize size, void *mem)
 Protected method called by derived classes to allocate memory using the object's allocator. More...
 
kStatus kObject_GetMemZero (kObject object, kSize size, void *mem)
 Protected method called by derived classes to allocate and zero memory using the object's allocator. More...
 
kStatus kObject_Init (kObject object, kType type, kAlloc alloc)
 Protected method called by derived classes to initialize the kObject base class. More...
 
kAllocTrait kObject_VAllocTraits (kObject object)
 Protected virtual method that gets the bitset of allocator traits for any allocators used within this object, including aggregated child elements. More...
 
kStatus kObject_VClone (kObject object, kObject source, kAlloc valueAllocator, kObject context)
 Protected virtual method that clones (makes a deep copy of) the specified source object. More...
 
kStatus kObject_VDisposeItems (kObject object)
 Protected virtual method that destroys any aggregated child objects associated with a collection. More...
 
kBool kObject_VEquals (kObject object, kObject other)
 Protected virtual method that compares two objects for equality. More...
 
kSize kObject_VHashCode (kObject object)
 Protected virtual method that calculates a hash code representing the object instance. More...
 
kBool kObject_VHasShared (kObject object)
 Protected virtual method that reports whether an object or any of its aggregated child elements has a reference count greater than one. More...
 
kStatus kObject_VRelease (kObject object)
 Protected virtual method that deallocates any resources owned by the object. More...
 
kSize kObject_VSize (kObject object)
 Protected virtual method that calculates the total size (in bytes) of the object instance. More...
 

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