You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
4.8 KiB
148 lines
4.8 KiB
# 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" |
|
depends on ASSERT |
|
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. |
|
|
|
Use for testing and validation only. |
|
|
|
config SYS_HEAP_STRESS |
|
bool "General purpose heap stress test" |
|
help |
|
Stresses the heap. |
|
|
|
Use for testing and validation only. |
|
|
|
config SYS_HEAP_INFO |
|
bool "Heap internal structure information" |
|
help |
|
Enables support for printing heap internal structure |
|
information to the console. |
|
|
|
Use for debugging only. |
|
|
|
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_ARRAY_SIZE |
|
int "Size of array to store heap pointers" |
|
default 0 |
|
help |
|
The size of the internal array to store heap pointers. The array |
|
is filled with a heap pointer on every sys_heap_init() call. |
|
One can then iterate through the array to get all heaps statistics |
|
and to sum up the total memory allocated for all heaps. |
|
|
|
The default array size is zero, which disables the feature. |
|
To enable the feature, assign a value greater than zero. |
|
|
|
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 MULTI_HEAP |
|
bool "Multi-heap manager" |
|
help |
|
Allows multiple sys_heap regions to be unified under a single |
|
allocation API. Sometimes apps need the ability to share multiple |
|
discontiguous regions in a single "heap", or |
|
to have memory of different "types" be allocated heuristically based |
|
on usage (e.g. cacheability, latency, power...). This allows a |
|
user-specified function to select the underlying memory to use for |
|
each application. |
|
|
|
config SHARED_MULTI_HEAP |
|
bool "Shared multi-heap manager" |
|
select MULTI_HEAP |
|
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. |
|
|
|
endmenu
|
|
|