|
Zen API
|
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:
All outstanding memory allocations must be freed before destroying the allocator.

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... | |