| .. _module-pw_allocator-size-reports: |
| |
| ================== |
| Code size analysis |
| ================== |
| .. pigweed-module-subpage:: |
| :name: pw_allocator |
| |
| This module provides the :cc:`pw::Allocator` interface, as |
| well as several implementations of it. The tables below shows the |
| relative code size for the interface and each of these implementations. The |
| measurement includes a call to each method. |
| |
| ------------------- |
| Allocator interface |
| ------------------- |
| The following shows the code size incurred by the |
| :cc:`pw::Allocator` interface itself. A call to each method |
| of the interface is measured using an empty implementation, |
| :cc:`pw::allocator::NullAllocator`. |
| |
| .. include:: allocator_api_size_report |
| |
| --------------------- |
| Block implementations |
| --------------------- |
| Most of the concrete allocator implementations are block allocators that use |
| :ref:`module-pw_allocator-design-blocks` to manage allocations. Code size and |
| memory overhead for blocks varies depending on what features are included. |
| |
| The following are code sizes for the block implementations provided by this |
| module. |
| |
| .. include:: blocks_size_report |
| |
| Impact of different hardening levels |
| ==================================== |
| This module includes :cc:`PW_ALLOCATOR_HARDENING` which sets which |
| validation checks are included. Additional checks can detect more errors at the |
| cost of additional code size, as illustrated in the size report below: |
| |
| .. include:: hardening_size_report |
| |
| ---------------------- |
| Bucket implementations |
| ---------------------- |
| Most of the concrete allocator implementations are block allocators that use |
| :ref:`module-pw_allocator-design-buckets` to organize blocks that are not in use |
| and are available for allocation. |
| |
| The following are code sizes for the block implementations provided by this |
| module. These are measured relative to the container they use, as reusing |
| container types may save code size. See :ref:`module-pw_containers` for code |
| size information on each container type. |
| |
| .. include:: buckets_size_report |
| |
| ------------------------------- |
| Block allocator implementations |
| ------------------------------- |
| Most of the concrete allocator implementations provided by this module that |
| are derived from :cc:`BlockAllocator <pw::allocator::BlockAllocator>`. |
| The following are code sizes for each of the block allocator implementations, |
| and are measured relative to the blocks they use. |
| |
| .. include:: block_allocators_size_report |
| |
| ---------------------------------------- |
| Other concrete allocator implementations |
| ---------------------------------------- |
| The following are code sizes for the other allocator implementations that |
| directly manage the memory they use to fulfill requests, but that do not derive |
| from :cc:`BlockAllocator <pw::allocator::BlockAllocator>`. These are |
| measured relative to the empty implementation measured above. |
| |
| .. include:: concrete_allocators_size_report |
| |
| ------------------------------------- |
| Forwarding allocators implementations |
| ------------------------------------- |
| The following are code sizes for each of the provided "forwarding" allocators as |
| described by :ref:`module-pw_allocator-design-forwarding`. These are measured |
| by having the forwarding allocator wrap a |
| :cc:`FirstFitAllocator <pw::allocator::FirstFitAllocator>`, and are |
| measured relative to that implementation. |
| |
| .. include:: forwarding_allocators_size_report |