| # Copyright (c) 2021 Intel Corporation |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| menu "Heap and Memory Allocation" |
| |
| config SYS_HEAP_VALIDATE |
| bool "Internal heap validity checking" |
| help |
| The sys_heap implementation is instrumented for extensive |
| internal validation. Leave this off by default, unless |
| modifying the heap code or (maybe) when running in |
| environments that require sensitive detection of memory |
| corruption. |
| |
| config SYS_HEAP_ALLOC_LOOPS |
| int "Number of tries in the inner heap allocation loop" |
| default 3 |
| help |
| The sys_heap allocator bounds the number of tries from the |
| smallest chunk level (the one that might not fit the |
| requested allocation) to maintain constant time performance. |
| Setting this to a high level will cause the heap to return |
| more successful allocations in situations of high |
| fragmentation, at the cost of potentially significant |
| (linear time) searching of the free list. The default is |
| three, which results in an allocator with good statistical |
| properties ("most" allocations that fit will succeed) but |
| keeps the maximum runtime at a tight bound so that the heap |
| is useful in locked or ISR contexts. |
| |
| config SYS_HEAP_RUNTIME_STATS |
| bool "System heap runtime statistics" |
| help |
| Gather system heap runtime statistics. |
| |
| config SYS_HEAP_LISTENER |
| bool "sys_heap event notifications" |
| select HEAP_LISTENER |
| help |
| This allows application to listen for sys_heap events, |
| such as memory allocation and de-allocation. |
| |
| config HEAP_LISTENER |
| bool |
| help |
| Hidden option to enable API for registering and notifying |
| listeners of certain events related to a heap usage, |
| such as the heap resize. |
| |
| choice |
| prompt "Supported heap sizes" |
| depends on !64BIT |
| default SYS_HEAP_SMALL_ONLY if (SRAM_SIZE <= 256) |
| default SYS_HEAP_AUTO |
| help |
| Heaps using reduced-size chunk headers can accommodate so called |
| "small" heaps with a total size of 262136 bytes or less. |
| |
| Heaps using full-size chunk headers can have a total size up to |
| 16383 megabytes. The overhead is of course bigger. |
| |
| On 32-bit system the tradeoff is selectable between: |
| |
| - "small" heaps with low memory and runtime overhead; |
| |
| - "big" heaps with bigger memory overhead even for small heaps; |
| |
| - "auto" providing optimal memory overhead in all cases but with |
| a higher runtime overhead and somewhat bigger code footprint. |
| |
| On 64-bit systems the "big" chunk header size conveniently provides |
| the needed alignment on returned memory allocations. Small chunk |
| headers would require alignment padding up to the big header size |
| anyway so "big" heap is the only option in that case. |
| |
| config SYS_HEAP_SMALL_ONLY |
| bool "Support for small heaps only" |
| help |
| Select this to optimize the code and memory usage if all your |
| heaps are 262136 bytes or less. |
| |
| config SYS_HEAP_BIG_ONLY |
| bool "Support for big heaps only" |
| help |
| Select this to optimize the code for big heaps only. This can |
| accommodate any heap size but memory usage won't be as |
| efficient with small sized heaps. |
| |
| config SYS_HEAP_AUTO |
| bool "Support for both small and big heaps at run time" |
| help |
| This option optimizes memory usage for each heap according to |
| their size albeit with some overhead in code size and execution. |
| |
| endchoice |
| |
| config SHARED_MULTI_HEAP |
| bool "Shared multi-heap manager" |
| help |
| Enable support for a shared multi-heap manager that uses the |
| multi-heap allocator to manage a set of reserved memory regions with |
| different capabilities / attributes (cacheable, non-cacheable, |
| etc...) defined in the DT. |
| |
| config SYS_MEM_BLOCKS |
| bool "(Yet Another) Memory Blocks Allocator" |
| help |
| This enables support for memory block allocator where: |
| () All memory blocks have a single fixed size. |
| () Multiple blocks can be allocated or freed at the same time. |
| () A group of blocks allocated together may not be contiguous. |
| This is useful for operations such as scatter-gather DMA |
| transfers. |
| () Bookkeeping of allocated blocks is done outside of |
| the associated buffer (unlike memory slab). This allows |
| the buffer to reside in memory regions where these can be |
| powered down to conserve energy. |
| |
| config SYS_MEM_BLOCKS_LISTENER |
| bool "Memory Blocks Allocator event notifications" |
| depends on SYS_MEM_BLOCKS |
| select HEAP_LISTENER |
| help |
| This allows application to listen for memory blocks allocator |
| events, such as memory allocation and de-allocation. |
| |
| config SYS_MEM_BLOCKS_RUNTIME_STATS |
| bool "Memory blocks runtime statistics" |
| depends on SYS_MEM_BLOCKS |
| help |
| This option enables the tracking and reporting of the memory |
| blocks statistics related to the current and maximum number |
| of allocations in a given memory block. |
| |
| endmenu |