eheap is a bin-type heap that provides adaptability, safety, and high performance for embedded systems running on RTOSes or standalone. It is intended to be a good fit for the many requirements of embedded systems. It can be easily tuned to the needs of your system, achieving high performance and minimal fragmentation. In addition, it offers some interesting debug and self-healing options.
- Multiple heap support for secure systems.
- Aligned allocations.
- ARM Cortex v7M MPU region allocations.
- Integral 8-byte and 12-byte block pools.
- Configurable number of bins and sizes.
- Deferred free chunk merging.
- Bin sort and bin seed.
- Self healing via bi-directional scanning.
- Debug chunks and statistics aid debugging.
- High performance and deterministic operation.
- Small code and data footprint.
- RTOS and compiler agnostic.
- Licensed standalone and as part of SMX.
eheap can efficiently support any number of heaps. Each can be independently configured to support tiny to very large heaps, each with an appropriate number of bins and other features. Having multiple heaps is essential for achieving 100% isolation of partitions in secure systems.
Allocations can be aligned on any power-of-two boundary from 8 up to a specified maximum. Allocation efficiency is improved by accumulation of spare space in chunks ahead of chunks with aligned blocks. This also results in steady growth of aligned blocks, which improves aligned allocation performance.
eheap supports ARM Cortex-v7M MPU region allocations, thus permitting dynamic region creation at run time. This is simpler and more flexible than static region creation at compile time. To do this, allocated regions must have power-of-two sizes and be aligned on their sizes. eheap uses subregions to greatly improve the efficiency of region allocations.
Integral block pools have been added to greatly improve speed and efficiency of small-block allocations for object-oriented languages such as C++. The pools operate like normal heap operations and if a pool becomes empty, blocks are transparently allocated from the main heap. Thus block pools can be sized for normal, rather than peak requirements.