|
Zen API
|
Allocates memory from user-defined memory regions.
The kHeapAlloc class establishes a memory heap within one or more pre-allocated regions of memory. After construction, the inherited kAlloc_Get/kAlloc_Free functions can be used to allocate or free memory from within the heap.
Heap management information is stored in the preallocated memory regions that comprise the memory heap. Accordingly, the effective capacity of the heap allocator will be somewhat less than the sum of the preallocated memory regions. The amount of memory consumed by heap management information increases with the number free blocks that must be managed by the heap, which in turn increases with heap fragmentation.
It is valid to destroy a kHeapAlloc instance without first deallocating all of the memory allocated by it. This approach may sometimes be advantageous for performance or convenience. However, it is invalid to access memory that was allocated from a kHeapAlloc instance after the kHeapAlloc instance has been destroyed.
All public functions are thread-safe. kAlloc_Get/kAlloc_Free functions have O(log n) time complexity, where n is number of free blocks managed by the heap.

Public Types | |
| typedef kStatus(kCall * | kHeapAllocExhaustionFx )(kHeapAlloc heapAlloc, kPointer receiver, kSize minimumRegionSize) |
| Signature of callback to notify about heap exhaustion. More... | |
Public Member Functions | |
| kStatus | kHeapAlloc_AddExhaustionHandler (kHeapAlloc heapAlloc, kHeapAllocExhaustionFx callback, kPointer receiver) |
| Adds a callback that will be invoked upon memory exhaustion. More... | |
| kStatus | kHeapAlloc_AddMemoryRegion (kHeapAlloc heapAlloc, kPointer address, kSize size) |
| Adds a pre-allocated memory region for use of the kHeapAlloc object. More... | |
| kStatus | kHeapAlloc_Clear (kHeapAlloc heapAlloc) |
| Frees all memory allocations that have been made from this kHeapAlloc instance. More... | |
| kStatus | kHeapAlloc_Construct (kHeapAlloc *heapAlloc, kAlloc allocator) |
| Constructs a new kHeapAlloc instance. More... | |
| kStatus | kHeapAlloc_RemoveMemoryRegions (kHeapAlloc heapAlloc) |
| Removes all added memory regions. More... | |
| kStatus | kHeapAlloc_Stats (kHeapAlloc heapAlloc, kHeapAllocStats *stats) |
| Reports used and free blocks from all added memory regions. 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... | |