ChibiOS/RT is a static kernel so you don't need to manage memory at all if your application doesn't really require it. This doesn't mean that the OS is unable to manage memory but just that memory management is an optional part of the whole.
The OS offers three distinct ways to manage memory, each one with its weaknesses and strengths:
The three mechanisms are able to coexist and are well integrated, for example the heap allocator uses the core memory manager in order to get more memory blocks, memory pools can optionally do the same thing. Please refer to the kernel reference manual for more details.
This is a small comparison table regarding the three subsystems, C-runtime and static objects are thrown in there for comparison:
|Subsystem||Free Capable||Constant Time||Safe||From ISR||Notes|
|Static Objects||N/A||N/A||yes||yes||Preferred solution for safety applications.|
|Core Memory Manager||no||yes||yes||yes||Fast and safe but unable to free allocated memory.|
|Heap Allocator||yes||no||yes||no||Unsafe because fragmentation and not constant time, cannot be used from IRQ handlers.|
|Memory Pools||yes||yes||yes||yes||Fast and safe but it can handle fixed size objects only, you may have multiple memory pools however.|
|C-Runtime||yes||no||no||no||Unsafe because fragmentation, not constant time, cannot be used from IRQ handlers and not thread safe. The C runtime must also be modified in order to work with the other allocators.|
When designing a system it is recommended to proceed as follow: