diff options
| author | Thomas Martitz <kugel@rockbox.org> | 2014-01-28 06:58:09 +0100 |
|---|---|---|
| committer | Thomas Martitz <kugel@rockbox.org> | 2014-02-02 19:40:38 +0100 |
| commit | 4ce39f7e73b1d1ca4ac5c906d9f9593f46872133 (patch) | |
| tree | 4f6c5c5b6839e9b4ba08600e72459fe6b788a862 | |
| parent | 4ce1deacfd4e5440cc82237ebc5fafbaeea64763 (diff) | |
| download | rockbox-4ce39f7e73b1d1ca4ac5c906d9f9593f46872133.zip rockbox-4ce39f7e73b1d1ca4ac5c906d9f9593f46872133.tar.gz rockbox-4ce39f7e73b1d1ca4ac5c906d9f9593f46872133.tar.bz2 rockbox-4ce39f7e73b1d1ca4ac5c906d9f9593f46872133.tar.xz | |
buflib: Add a define telling the per-alloc overhead.
This allows buflib clients to more accurately estimate the total memory usage.
It's still not 100% accurate because the handle table grows in blocks, thus
buflib might use more memory that caused by allocations directly.
Change-Id: I68338bb94f510ad188fcb588aebf895b5f9197c5
| -rw-r--r-- | firmware/buflib.c | 2 | ||||
| -rw-r--r-- | firmware/include/buflib.h | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/firmware/buflib.c b/firmware/buflib.c index 27a6965..8d5fe1e 100644 --- a/firmware/buflib.c +++ b/firmware/buflib.c @@ -55,6 +55,8 @@ * to find the start of the character array (and therefore the start of the * entire block) when only the handle or payload start is known. * + * UPDATE BUFLIB_ALLOC_OVERHEAD (buflib.h) WHEN THIS COOKIE CHANGES! + * * Example: * |<- alloc block #1 ->|<- unalloc block ->|<- alloc block #2 ->|<-handle table->| * |L|H|C|cccc|L2|crc|XXXXXX|-L|YYYYYYYYYYYYYYYY|L|H|C|cc|L2|crc|XXXXXXXXXXXXX|AAA| diff --git a/firmware/include/buflib.h b/firmware/include/buflib.h index e912429..1bae3e7 100644 --- a/firmware/include/buflib.h +++ b/firmware/include/buflib.h @@ -54,6 +54,17 @@ struct buflib_context }; /** + * This declares the minimal overhead that is required per alloc. These + * are bytes that are allocated from the context's pool in addition + * to the actually requested number of bytes. + * + * The total number of bytes consumed by an allocation is + * BUFLIB_ALLOC_OVERHEAD + requested bytes + strlen(<name passed to + * buflib_alloc_ex()) + pad to pointer size + */ +#define BUFLIB_ALLOC_OVERHEAD (6*sizeof(union buflib_data)) + +/** * Callbacks used by the buflib to inform allocation that compaction * is happening (before data is moved) * |