Code size analysis#

pw_allocator: Flexible, safe, and measurable memory allocation

This module provides the 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 Allocator interface itself. A call to each method of the interface is measured using an empty implementation, NullAllocator.

Label

Segment

Delta

NullAllocator

FLASH

+12

[section .rodata]

-2

pw::GetAlignedSubspan()

+4

pw::allocator::size_report::Measure()

-4

vClearInterruptMaskFromISR

NEW

+124

pw::Allocator::DoReallocate()

NEW

+52

pw::allocator::NullAllocator

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

pw::Result<>::operator->()

NEW

+32

pw::Allocator::Reallocate()

NEW

+26

pw::Allocator::Resize()

NEW

+14

pw::Deallocator::DoGetInfo()

NEW

+12

pw::allocator::NullAllocator::DoDeallocate()

NEW

+12

pw::allocator::size_report::MeasureAllocator()

NEW

+10

pw::allocator::NullAllocator::~NullAllocator()

NEW

+8

pw::Allocator::DoResize()

NEW

+8

pw::allocator::GetNullAllocator()

NEW

+6

pw::Allocator::DoGetAllocated()

NEW

+4

pw::allocator::NullAllocator::DoAllocate()

NEW

+2

pw::Deallocator::~Deallocator()

+400

Block implementations#

Most of the concrete allocator implementations are block allocators that use Blocks of memory 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.

Label

Segment

Delta

DetailedBlock

FLASH

+8

[section .rodata]

-8

vClearInterruptMaskFromISR

NEW

+174

pw::allocator::size_report::MeasureBlock<>()

NEW

+168

pw::allocator::AllocatableBlock<>::DoResize()

NEW

+160

pw::allocator::AllocatableBlock<>::DoAllocLast()

NEW

+132

pw::allocator::AlignableBlock<>::DoAllocFirst()

NEW

+100

pw::allocator::AlignableBlock<>::DoAllocAligned()

NEW

+92

pw::allocator::AllocatableBlock<>::DoAllocFirst()

NEW

+92

pw::allocator::BlockWithLayout<>::DoFree()

NEW

+90

pw::allocator::AllocatableBlock<>::DoFree()

NEW

+76

pw::allocator::AlignableBlock<>::DoAllocLast()

NEW

+72

pw::allocator::ContiguousBlock<>::DoSplitFirst()

NEW

+70

pw::allocator::BasicBlock<>::Init()

NEW

+62

pw::allocator::AlignableBlock<>::DoCanAlloc()

NEW

+62

pw::allocator::BlockWithLayout<>::DoResize()

NEW

+48

pw::allocator::AllocatableBlock<>::DoCanAlloc()

NEW

+48

pw::allocator::BlockWithLayout<>::DoAllocFirst()

NEW

+48

pw::allocator::BlockWithLayout<>::DoAllocLast()

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator17DetailedBlockImplINS2_23DetailedBlockParametersIjNS2_21GenericFastSortedItemEEEEELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleISB_OT_EE5valueEiE4typeELi0EEESF_

NEW

+40

pw::Result<>::operator*()

NEW

+40

pw::allocator::ContiguousBlock<>::DoMergeNext()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocFirst()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocLast()

NEW

+32

pw::allocator::PoisonableBlock<>::DoSplitLast()

NEW

+30

pw::allocator::DetailedBlockImpl<>::SetNext()

NEW

+28

pw::allocator::PoisonableBlock<>::DoSplitFirst()

NEW

+26

pw::allocator::AllocatableBlock<>::Free()

NEW

+26

pw::allocator::AllocatableBlock<>::Resize()

NEW

+16

pw::allocator::ContiguousBlock<>::DoSplitLast()

NEW

+16

pw::allocator::PoisonableBlock<>::DoMergeNext()

NEW

+16

pw::allocator::size_report::GetBuffer()

+1,880

SmallBlock

FLASH

+8

[section .rodata]

-4

vClearInterruptMaskFromISR

NEW

+180

pw::allocator::size_report::MeasureBlock<>()

NEW

+164

pw::allocator::AllocatableBlock<>::DoResize()

NEW

+160

pw::allocator::AllocatableBlock<>::DoAllocLast()

NEW

+90

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+88

pw::allocator::AllocatableBlock<>::DoAllocFirst()

NEW

+86

pw::allocator::AllocatableBlock<>::DoFree()

NEW

+56

pw::allocator::ContiguousBlock<>::DoSplitFirst()

NEW

+48

pw::allocator::AllocatableBlock<>::DoCanAlloc()

NEW

+48

pw::allocator::BasicBlock<>::Init()

NEW

+48

pw::allocator::ContiguousBlock<>::DoMergeNext()

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

pw::Result<>::operator*()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocFirst()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocLast()

NEW

+26

pw::allocator::AllocatableBlock<>::Free()

NEW

+26

pw::allocator::AllocatableBlock<>::Resize()

NEW

+18

pw::allocator::ContiguousBlock<>::DoSplitLast()

NEW

+16

_ZN2pw9allocator10BasicBlockINS0_10SmallBlockEE15FromUsableSpaceIPSt4byteEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES9_

NEW

+16

pw::allocator::size_report::GetBuffer()

NEW

+10

pw::allocator::BasicBlock<>::CheckInvariants()

+1,240

SmallAlignableBlock

FLASH

+8

[section .rodata]

NEW

+174

pw::allocator::size_report::MeasureBlock<>()

NEW

+164

pw::allocator::AllocatableBlock<>::DoResize()

NEW

+160

pw::allocator::AllocatableBlock<>::DoAllocLast()

NEW

+134

pw::allocator::AlignableBlock<>::DoAllocFirst()

NEW

+100

pw::allocator::AlignableBlock<>::DoAllocAligned()

NEW

+90

pw::allocator::AllocatableBlock<>::DoAllocFirst()

NEW

+84

pw::allocator::AllocatableBlock<>::DoFree()

NEW

+76

pw::allocator::AlignableBlock<>::DoAllocLast()

NEW

+62

pw::allocator::AlignableBlock<>::DoCanAlloc()

NEW

+56

pw::allocator::ContiguousBlock<>::DoSplitFirst()

NEW

+50

pw::allocator::BasicBlock<>::Init()

NEW

+48

pw::allocator::AllocatableBlock<>::DoCanAlloc()

NEW

+48

pw::allocator::ContiguousBlock<>::DoMergeNext()

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator19SmallAlignableBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

pw::Result<>::operator*()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocFirst()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocLast()

NEW

+26

pw::allocator::AllocatableBlock<>::Free()

NEW

+26

pw::allocator::AllocatableBlock<>::Resize()

NEW

+18

pw::allocator::ContiguousBlock<>::DoSplitLast()

NEW

+16

pw::allocator::size_report::GetBuffer()

+1,496

TinyBlock

FLASH

+8

[section .rodata]

+4

vClearInterruptMaskFromISR

NEW

+164

pw::allocator::AllocatableBlock<>::DoResize()

NEW

+164

pw::allocator::size_report::MeasureBlock<>()

NEW

+138

pw::allocator::AllocatableBlock<>::DoAllocLast()

NEW

+92

pw::allocator::AllocatableBlock<>::DoAllocFirst()

NEW

+84

pw::allocator::AllocatableBlock<>::DoFree()

NEW

+72

pw::allocator::ContiguousBlock<>::DoSplitFirst()

NEW

+68

pw::allocator::BasicBlock<>::Init()

NEW

+52

pw::allocator::AllocatableBlock<>::DoCanAlloc()

NEW

+50

pw::allocator::ContiguousBlock<>::DoMergeNext()

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator9TinyBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

pw::Result<>::operator*()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocFirst()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocLast()

NEW

+26

pw::allocator::AllocatableBlock<>::Free()

NEW

+26

pw::allocator::AllocatableBlock<>::Resize()

NEW

+20

pw::allocator::ContiguousBlock<>::DoSplitLast()

NEW

+20

pw::allocator::ContiguousBlock<>::NextUnchecked()

NEW

+16

pw::allocator::size_report::GetBuffer()

+1,160

Impact of different hardening levels#

This module includes 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:

Label

Segment

Delta

FastSortedBucket, which uses IntrusiveMultiMap

FLASH

-2

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

+72

pw::containers::internal::AATreeIterator<>::operator++()

-2

pw::allocator::BasicBlock<>::Init()

+36

pw::allocator::size_report::Measure()

-2

pw::containers::internal::GenericAATree::~GenericAATree()

+22

pw::IntrusiveMultiMap<>::erase()

+4

vClearInterruptMaskFromISR

NEW

+182

pw::allocator::size_report::MeasureBucket<>()

NEW

+92

pw::allocator::FastSortedBucket<>::DoRemove()

NEW

+92

pw::allocator::FastSortedBucket<>::RemoveImpl<>()

NEW

+62

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_8internal10BucketBaseINS3_16FastSortedBucketIS5_EES5_S6_E21MakeCanAllocPredicateENS3_6LayoutEEUlRS6_E_EET_SH_SH_T0_

NEW

+52

pw::containers::internal::AATreeItem::Clear()

NEW

+50

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_16FastSortedBucketIS5_E8DoRemoveERS5_EUlRS6_E_EET_SE_SE_T0_

NEW

+38

pw::allocator::FastSortedBucket<>::DoRemoveCompatible()

NEW

+34

pw::allocator::FastSortedBucket<>::DoRemoveAny()

NEW

+34

pw::allocator::internal::BucketBase<>::Add()

NEW

+24

pw::allocator::FastSortedBucket<>::DoAdd()

NEW

+24

pw::allocator::internal::BucketBase<>::Remove()

NEW

+22

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+20

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+20

pw::allocator::FastSortedBucket<>::FastSortedBucket()

NEW

+20

pw::containers::internal::GenericAATree::clear()

NEW

+18

pw::allocator::internal::BucketBase<>::RemoveAny()

+912

RAM

NEW

+32

pw::allocator::size_report::Measure()::bucket

+32

SmallBlock with basic assertions enabled

FLASH

+8

[section .rodata]

-4

vClearInterruptMaskFromISR

NEW

+180

pw::allocator::size_report::MeasureBlock<>()

NEW

+164

pw::allocator::AllocatableBlock<>::DoResize()

NEW

+160

pw::allocator::AllocatableBlock<>::DoAllocLast()

NEW

+90

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+88

pw::allocator::AllocatableBlock<>::DoAllocFirst()

NEW

+86

pw::allocator::AllocatableBlock<>::DoFree()

NEW

+56

pw::allocator::ContiguousBlock<>::DoSplitFirst()

NEW

+48

pw::allocator::AllocatableBlock<>::DoCanAlloc()

NEW

+48

pw::allocator::BasicBlock<>::Init()

NEW

+48

pw::allocator::ContiguousBlock<>::DoMergeNext()

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

pw::Result<>::operator*()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocFirst()

NEW

+38

pw::allocator::AllocatableBlock<>::AllocLast()

NEW

+26

pw::allocator::AllocatableBlock<>::Free()

NEW

+26

pw::allocator::AllocatableBlock<>::Resize()

NEW

+18

pw::allocator::ContiguousBlock<>::DoSplitLast()

NEW

+16

_ZN2pw9allocator10BasicBlockINS0_10SmallBlockEE15FromUsableSpaceIPSt4byteEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES9_

NEW

+16

pw::allocator::size_report::GetBuffer()

NEW

+10

pw::allocator::BasicBlock<>::CheckInvariants()

+1,240

DetailedBlock with robust assertions enabled

FLASH

+128

[section .rodata]

-4

vClearInterruptMaskFromISR

NEW

+162

pw::allocator::size_report::MeasureBlock<>()

NEW

+144

pw::allocator::AllocatableBlock<>::DoResize()

NEW

+138

pw::allocator::AllocatableBlock<>::DoAllocLast()

NEW

+88

pw::allocator::AllocatableBlock<>::DoAllocFirst()

NEW

+84

pw::allocator::AllocatableBlock<>::DoFree()

NEW

+80

pw::allocator::ContiguousBlock<>::DoSplitFirst()

NEW

+64

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+60

pw::allocator::AllocatableBlock<>::AllocFirst()

NEW

+60

pw::allocator::AllocatableBlock<>::AllocLast()

NEW

+50

pw::allocator::BasicBlock<>::Init()

NEW

+50

pw::allocator::ContiguousBlock<>::DoMergeNext()

NEW

+48

pw::allocator::AllocatableBlock<>::DoCanAlloc()

NEW

+42

pw::allocator::AllocatableBlock<>::Resize()

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

pw::Result<>::operator*()

NEW

+38

pw::allocator::AllocatableBlock<>::Free()

NEW

+36

pw::allocator::Hardening::Decrement<>()

NEW

+36

pw::allocator::Hardening::Increment<>()

NEW

+26

pw::allocator::ContiguousBlock<>::PrevUnchecked()

NEW

+24

_ZN2pw9allocator10BasicBlockINS0_10SmallBlockEE15FromUsableSpaceIPSt4byteEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES9_

NEW

+24

pw::allocator::ContiguousBlock<>::NextUnchecked()

NEW

+22

pw::allocator::ContiguousBlock<>::DoSplitLast()

NEW

+16

_ZN2pw9allocator10BasicBlockINS0_10SmallBlockEE24UsableSpaceUncheckedImplIPS3_EEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ESt4byteE4typeEES8_

NEW

+16

pw::allocator::BasicBlock<>::InnerSizeFromOuterSize()

NEW

+16

pw::allocator::size_report::GetBuffer()

NEW

+14

pw::allocator::BasicBlock<>::InnerSizeUnchecked()

NEW

+10

pw::allocator::BasicBlock<>::CheckInvariants()

+1,552

DetailedBlock with debug assertions enabled

FLASH

+268

[section .rodata]

-2

pw::GetAlignedSubspan()

+4

__bi_84

NEW

+218

pw::allocator::AllocatableBlock<>::DoResize()

NEW

+164

pw::allocator::AllocatableBlock<>::DoAllocLast()

NEW

+162

pw::allocator::size_report::MeasureBlock<>()

NEW

+158

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+120

pw::allocator::AllocatableBlock<>::DoFree()

NEW

+100

pw::allocator::AllocatableBlock<>::DoAllocFirst()

NEW

+98

pw::allocator::BlockResult<>::BlockResult()

NEW

+78

pw::allocator::ContiguousBlock<>::DoSplitFirst()

NEW

+66

pw::allocator::AllocatableBlock<>::AllocFirst()

NEW

+66

pw::allocator::AllocatableBlock<>::AllocLast()

NEW

+60

pw::allocator::ContiguousBlock<>::DoMergeNext()

NEW

+60

pw::allocator::internal::GenericBlockResult::GenericBlockResult()

NEW

+54

pw::allocator::AllocatableBlock<>::DoCanAlloc()

NEW

+54

pw::allocator::BasicBlock<>::Init()

NEW

+50

pw::allocator::AllocatableBlock<>::Resize()

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

pw::Result<>::operator*()

NEW

+38

pw::allocator::AllocatableBlock<>::Free()

NEW

+36

pw::allocator::Hardening::Decrement<>()

NEW

+36

pw::allocator::Hardening::Increment<>()

NEW

+36

pw::allocator::internal::GenericBlockResult::Encode()

NEW

+36

pw::allocator::internal::GenericBlockResult::IgnoreUnlessStrict()

NEW

+28

pw::allocator::SmallBlockBase<>::DoCheckInvariants()

NEW

+26

pw::allocator::ContiguousBlock<>::PrevUnchecked()

NEW

+24

_ZN2pw9allocator10BasicBlockINS0_10SmallBlockEE15FromUsableSpaceIPSt4byteEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES9_

NEW

+24

pw::allocator::BasicBlock<>::DoCheckInvariants()

NEW

+24

pw::allocator::ContiguousBlock<>::NextUnchecked()

NEW

+22

pw::allocator::ContiguousBlock<>::DoSplitLast()

NEW

+16

_ZN2pw9allocator10BasicBlockINS0_10SmallBlockEE24UsableSpaceUncheckedImplIPS3_EEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ESt4byteE4typeEES8_

NEW

+16

pw::allocator::AllocatableBlock<>::IsFree()

NEW

+16

pw::allocator::BasicBlock<>::InnerSize()

NEW

+16

pw::allocator::BasicBlock<>::InnerSizeFromOuterSize()

NEW

+16

pw::allocator::BasicBlock<>::OuterSize()

NEW

+16

pw::allocator::BasicBlock<>::UsableSpace()

NEW

+16

pw::allocator::ContiguousBlock<>::Next()

NEW

+16

pw::allocator::ContiguousBlock<>::Prev()

NEW

+16

pw::allocator::size_report::GetBuffer()

NEW

+14

pw::allocator::BasicBlock<>::InnerSizeUnchecked()

NEW

+12

pw::allocator::BasicBlock<>::CheckInvariants()

NEW

+2

pw::allocator::internal::CheckMisaligned()

NEW

+2

pw::allocator::internal::CheckNextMisaligned()

NEW

+2

pw::allocator::internal::CheckNextPrevMismatched()

NEW

+2

pw::allocator::internal::CheckPrevMisaligned()

NEW

+2

pw::allocator::internal::CheckPrevNextMismatched()

+2,368

Bucket implementations#

Most of the concrete allocator implementations are block allocators that use Buckets of blocks 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 pw_containers for code size information on each container type.

Label

Segment

Delta

FastSortedBucket, which uses IntrusiveMultiMap

FLASH

-2

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

+72

pw::containers::internal::AATreeIterator<>::operator++()

-2

pw::allocator::BasicBlock<>::Init()

+36

pw::allocator::size_report::Measure()

-2

pw::containers::internal::GenericAATree::~GenericAATree()

+22

pw::IntrusiveMultiMap<>::erase()

+4

vClearInterruptMaskFromISR

NEW

+182

pw::allocator::size_report::MeasureBucket<>()

NEW

+92

pw::allocator::FastSortedBucket<>::DoRemove()

NEW

+92

pw::allocator::FastSortedBucket<>::RemoveImpl<>()

NEW

+62

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_8internal10BucketBaseINS3_16FastSortedBucketIS5_EES5_S6_E21MakeCanAllocPredicateENS3_6LayoutEEUlRS6_E_EET_SH_SH_T0_

NEW

+52

pw::containers::internal::AATreeItem::Clear()

NEW

+50

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_16FastSortedBucketIS5_E8DoRemoveERS5_EUlRS6_E_EET_SE_SE_T0_

NEW

+38

pw::allocator::FastSortedBucket<>::DoRemoveCompatible()

NEW

+34

pw::allocator::FastSortedBucket<>::DoRemoveAny()

NEW

+34

pw::allocator::internal::BucketBase<>::Add()

NEW

+24

pw::allocator::FastSortedBucket<>::DoAdd()

NEW

+24

pw::allocator::internal::BucketBase<>::Remove()

NEW

+22

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+20

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+20

pw::allocator::FastSortedBucket<>::FastSortedBucket()

NEW

+20

pw::containers::internal::GenericAATree::clear()

NEW

+18

pw::allocator::internal::BucketBase<>::RemoveAny()

+912

RAM

NEW

+32

pw::allocator::size_report::Measure()::bucket

+32

SequencedBucket, which uses IntrusiveList

FLASH

+2

pw::allocator::BasicBlock<>::Init()

+16

pw::allocator::size_report::Measure()

-2

pw::containers::internal::IntrusiveListItemBase<>::~IntrusiveListItemBase()

+4

vClearInterruptMaskFromISR

NEW

+186

pw::allocator::size_report::MeasureBucket<>()

NEW

+72

pw::allocator::SequencedBucket<>::DoRemove()

NEW

+70

pw::allocator::SequencedBucket<>::DoRemoveCompatible()

NEW

+58

pw::allocator::SequencedBucket<>::DoAdd()

NEW

+36

_ZNSt3__27find_ifB8nn210000IN2pw10containers8internal21BidirectionalIteratorINS1_9allocator13SequencedItemENS3_17IntrusiveListItemEEEZNS5_8internal10BucketBaseINS5_15SequencedBucketINS5_10SmallBlockEEESC_S6_E21MakeCanAllocPredicateENS5_6LayoutEEUlRS6_E_EET_SI_SI_T0_

NEW

+36

_ZNSt3__27find_ifB8nn210000INS_16reverse_iteratorIN2pw10containers8internal21BidirectionalIteratorINS2_9allocator13SequencedItemENS4_17IntrusiveListItemEEEEEZNS6_8internal10BucketBaseINS6_15SequencedBucketINS6_10SmallBlockEEESE_S7_E21MakeCanAllocPredicateENS6_6LayoutEEUlRS7_E_EET_SK_SK_T0_

NEW

+26

pw::allocator::internal::BucketBase<>::Add()

NEW

+22

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+22

pw::allocator::internal::BucketBase<>::Remove()

NEW

+20

_ZNSt3__27find_ifB8nn210000INS_16reverse_iteratorIN2pw10containers8internal21BidirectionalIteratorINS2_9allocator13SequencedItemENS4_17IntrusiveListItemEEEEEZNS6_15SequencedBucketINS6_10SmallBlockEE5DoAddERSC_EUlRS7_E_EET_SH_SH_T0_

NEW

+20

_ZNSt3__27find_ifB8nn210000INS_16reverse_iteratorIN2pw10containers8internal21BidirectionalIteratorINS2_9allocator13SequencedItemENS4_17IntrusiveListItemEEEEEZNS6_15SequencedBucketINS6_10SmallBlockEE8DoRemoveERSC_EUlRS7_E_EET_SH_SH_T0_

NEW

+20

pw::allocator::internal::BucketBase<>::RemoveAny()

NEW

+18

pw::allocator::SequencedBucket<>::DoRemoveAny()

NEW

+14

_ZNSt3__27find_ifB8nn210000IN2pw10containers8internal21BidirectionalIteratorINS1_9allocator13SequencedItemENS3_17IntrusiveListItemEEEZNS5_15SequencedBucketINS5_10SmallBlockEE5DoAddERSA_EUlRS6_E0_EET_SF_SF_T0_

+640

RAM

NEW

+16

pw::allocator::size_report::Measure()::bucket

+16

SortedBucket, which uses IntrusiveForwardList

FLASH

+2

pw::allocator::BasicBlock<>::Init()

+16

pw::allocator::size_report::Measure()

-12

vClearInterruptMaskFromISR

NEW

+186

pw::allocator::size_report::MeasureBucket<>()

NEW

+62

pw::allocator::internal::BucketBase<>::FindPrevIf<>()

NEW

+44

pw::allocator::internal::SortedBucketBase<>::DoRemoveCompatible()

NEW

+32

pw::allocator::internal::SortedBucketBase<>::DoAdd()

NEW

+26

pw::allocator::internal::BucketBase<>::Add()

NEW

+22

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+22

pw::allocator::internal::BucketBase<>::Remove()

NEW

+20

pw::allocator::internal::BucketBase<>::RemoveAny()

NEW

+16

pw::allocator::internal::SortedBucketBase<>::DoRemoveAny()

NEW

+12

pw::allocator::internal::SortedBucketBase<>::DoRemove()

+448

UnorderedBucket, which uses IntrusiveForwardList

FLASH

+2

pw::allocator::BasicBlock<>::Init()

+16

pw::allocator::size_report::Measure()

-4

vClearInterruptMaskFromISR

NEW

+186

pw::allocator::size_report::MeasureBucket<>()

NEW

+44

pw::allocator::UnorderedBucket<>::DoRemoveCompatible()

NEW

+34

pw::allocator::internal::BucketBase<>::FindPrevIf<>()

NEW

+26

pw::allocator::internal::BucketBase<>::Add()

NEW

+22

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+22

pw::allocator::internal::BucketBase<>::Remove()

NEW

+20

pw::allocator::internal::BucketBase<>::RemoveAny()

NEW

+18

pw::allocator::UnorderedBucket<>::DoAdd()

NEW

+18

pw::allocator::UnorderedBucket<>::DoRemoveAny()

NEW

+12

pw::allocator::UnorderedBucket<>::DoRemove()

+416

Block allocator implementations#

Most of the concrete allocator implementations provided by this module that are derived from BlockAllocator. The following are code sizes for each of the block allocator implementations, and are measured relative to the blocks they use.

Label

Segment

Delta

BestFitAllocator

FLASH

+360

[section .rodata]

DEL

-174

pw::allocator::size_report::MeasureBlock<>()

-4

pw::allocator::AllocatableBlock<>::DoResize()

DEL

-160

pw::allocator::AllocatableBlock<>::DoAllocLast()

DEL

-132

pw::allocator::AlignableBlock<>::DoAllocFirst()

DEL

-100

pw::allocator::AlignableBlock<>::DoAllocAligned()

-4

pw::allocator::AllocatableBlock<>::DoAllocFirst()

DEL

-92

pw::allocator::BlockWithLayout<>::DoFree()

-6

pw::allocator::AllocatableBlock<>::DoFree()

DEL

-76

pw::allocator::AlignableBlock<>::DoAllocLast()

-2

pw::GetAlignedSubspan()

-16

pw::allocator::ContiguousBlock<>::DoSplitFirst()

-22

pw::allocator::BasicBlock<>::Init()

DEL

-62

pw::allocator::AlignableBlock<>::DoCanAlloc()

DEL

-62

pw::allocator::BlockWithLayout<>::DoResize()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocFirst()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocLast()

DEL

-40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator17DetailedBlockImplINS2_23DetailedBlockParametersIjNS2_21GenericFastSortedItemEEEEELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleISB_OT_EE5valueEiE4typeELi0EEESF_

+8

pw::allocator::ContiguousBlock<>::DoMergeNext()

DEL

-38

pw::allocator::AllocatableBlock<>::AllocLast()

DEL

-32

pw::allocator::PoisonableBlock<>::DoSplitLast()

DEL

-30

pw::allocator::DetailedBlockImpl<>::SetNext()

DEL

-28

pw::allocator::PoisonableBlock<>::DoSplitFirst()

DEL

-16

pw::allocator::ContiguousBlock<>::DoSplitLast()

DEL

-16

pw::allocator::PoisonableBlock<>::DoMergeNext()

+40

pw::allocator::size_report::Measure()

+6

operator delete()

NEW

+188

pw::containers::internal::AATree<>::InsertImpl()

NEW

+184

pw::containers::internal::AATreeItem::Rebalance()

NEW

+144

pw::containers::internal::AATreeIterator<>::operator++()

NEW

+142

pw::allocator::BlockAllocator<>::DoGetInfo()

NEW

+136

pw::containers::internal::AATreeItem::Unmap()

NEW

+128

pw::allocator::BlockAllocator<>::DoAllocate()

NEW

+126

pw::allocator::BlockAllocator<>::DeallocateBlock()

NEW

+124

pw::Allocator::DoReallocate()

NEW

+116

pw::allocator::BlockAllocator<>::DoResize()

NEW

+98

pw::containers::internal::AATree<>::insert()

NEW

+92

pw::allocator::FastSortedBucket<>::DoRemove()

NEW

+92

pw::allocator::FastSortedBucket<>::RemoveImpl<>()

NEW

+90

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+90

pw::containers::internal::AATreeItem::Split()

NEW

+84

pw::containers::internal::AATree<>::GetLowerBoundImpl()

NEW

+84

pw::containers::internal::AATree<>::GetUpperBoundImpl()

NEW

+80

pw::allocator::BlockAllocator<>::Init()

NEW

+76

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

NEW

+76

pw::allocator::BestFitAllocator<>::ChooseBlock()

NEW

+72

pw::allocator::BestFitAllocator<>

NEW

+72

pw::allocator::BlockAllocator<>

NEW

+68

pw::allocator::BestFitAllocator<>::BestFitAllocator()

NEW

+68

pw::containers::internal::AATreeItem::Skew()

NEW

+62

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_8internal10BucketBaseINS3_16FastSortedBucketIS5_EES5_S6_E21MakeCanAllocPredicateENS3_6LayoutEEUlRS6_E_EET_SH_SH_T0_

NEW

+62

pw::allocator::internal::BucketBase<>::FindPrevIf<>()

NEW

+60

pw::allocator::internal::BucketBase<>::Add()

NEW

+58

pw::allocator::BestFitAllocator<>::~BestFitAllocator()

NEW

+56

pw::containers::internal::AATree<>::AATree()

NEW

+56

pw::containers::internal::GenericAATree::erase_one()

NEW

+50

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_16FastSortedBucketIS5_E8DoRemoveERS5_EUlRS6_E_EET_SE_SE_T0_

NEW

+50

pw::containers::internal::AATreeItem::Clear()

NEW

+46

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+46

pw::allocator::internal::BucketBase<>::Remove()

NEW

+44

pw::PackedPtr<>::set()

NEW

+44

pw::PackedPtr<>::set_packed_value()

NEW

+44

pw::allocator::internal::SortedBucketBase<>::DoRemoveCompatible()

NEW

+44

pw::containers::internal::GenericAATree::end()

NEW

+42

_ZNK2pw9allocator14BlockAllocatorINS0_10SmallBlockEE15FromUsableSpaceIPvEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES8_

NEW

+42

pw::containers::internal::AATreeItem::GetPredecessor()

NEW

+42

pw::containers::internal::AATreeItem::GetSuccessor()

NEW

+42

pw::containers::internal::AATreeItem::IsMapped()

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

fit::internal::target<>::ops

NEW

+40

pw::Result<>::operator->()

NEW

+40

pw::allocator::BlockAllocator<>::UpdateLast()

NEW

+40

pw::containers::internal::AATreeItem::SetLevel()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+40

pw::containers::internal::GenericIntrusiveList<>::remove_if<>()

NEW

+38

pw::allocator::BlockAllocator<>::DoDeallocate()

NEW

+38

pw::allocator::FastSortedBucket<>::DoRemoveCompatible()

NEW

+38

pw::containers::internal::AATreeItem::Replace()

NEW

+36

pw::containers::internal::AATree<>::equal_range()

NEW

+34

pw::containers::internal::AATree<>::lower_bound()

NEW

+34

pw::containers::internal::AATree<>::upper_bound()

NEW

+32

pw::Allocator::Reallocate()

NEW

+32

pw::allocator::internal::SortedBucketBase<>::DoAdd()

NEW

+32

pw::containers::internal::AATree<>::~AATree()

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

pw::allocator::BestFitAllocator<>::RecycleBlock()

NEW

+30

pw::containers::internal::AATreeItem::SetRight()

NEW

+28

pw::allocator::BestFitAllocator<>::ReserveBlock()

NEW

+28

pw::containers::internal::AATreeItem::SetLeft()

NEW

+26

pw::allocator::IterableBlock<>::Iterator::operator++()

NEW

+24

fit::internal::target<>::invoke()

NEW

+24

pw::Allocator::Resize()

NEW

+24

pw::allocator::FastSortedBucket<>::DoAdd()

NEW

+24

pw::containers::internal::AATreeItem::GetLevel()

NEW

+24

pw::containers::internal::GenericIntrusiveList<>::~GenericIntrusiveList()

NEW

+22

pw::allocator::FastSortedBucket<>::~FastSortedBucket()

NEW

+22

pw::allocator::internal::SortedBucketBase<>::~SortedBucketBase()

NEW

+20

pw::IntrusiveMultiMap<>::erase()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+20

pw::allocator::FastSortedBucket<>::FastSortedBucket()

NEW

+20

pw::containers::internal::GenericAATree::clear()

NEW

+20

pw::containers::internal::IntrusiveListItemBase<>::~IntrusiveListItemBase()

NEW

+18

pw::IntrusiveMultiMap<>::end()

NEW

+18

pw::containers::internal::GenericAATree::~GenericAATree()

NEW

+16

pw::containers::internal::GenericAATree::SetRoot()

NEW

+16

pw::containers::internal::GenericIntrusiveList<>::clear()

NEW

+14

pw::allocator::BlockAllocator<>::~BlockAllocator()

NEW

+14

pw::containers::internal::AATreeItem::GetLeftmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRightmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRoot()

NEW

+14

pw::containers::internal::GenericIntrusiveList<>::remove()

NEW

+12

pw::allocator::internal::SortedBucketBase<>::DoRemove()

NEW

+12

pw::allocator::size_report::MeasureBlockAllocator()

NEW

+10

pw::allocator::BasicBlock<>::IsValid()

NEW

+10

pw::containers::internal::AATreeItem::Reset()

NEW

+8

pw::IntrusiveMultiMap<>::IntrusiveMultiMap()

NEW

+6

fit::internal::inline_trivial_target_move<>()

NEW

+4

pw::Allocator::DoResize()

NEW

+4

pw::allocator::BlockAllocator<>::DoGetAllocated()

NEW

+4

pw::allocator::BlockAllocator<>::RecycleBlock()

NEW

+2

__cxa_pure_virtual

NEW

+2

fit::internal::inline_target_get()

NEW

+2

pw::allocator::BlockAllocator<>::Flush()

NEW

+2

pw::allocator::BlockAllocator<>::ReserveBlock()

+3,832

RAM

NEW

+68

pw::allocator::size_report::Measure()::allocator

+68

BucketAllocator

FLASH

+232

[section .rodata]

DEL

-174

pw::allocator::size_report::MeasureBlock<>()

-4

pw::allocator::AllocatableBlock<>::DoResize()

DEL

-160

pw::allocator::AllocatableBlock<>::DoAllocLast()

DEL

-132

pw::allocator::AlignableBlock<>::DoAllocFirst()

DEL

-100

pw::allocator::AlignableBlock<>::DoAllocAligned()

-4

pw::allocator::AllocatableBlock<>::DoAllocFirst()

DEL

-92

pw::allocator::BlockWithLayout<>::DoFree()

-6

pw::allocator::AllocatableBlock<>::DoFree()

DEL

-76

pw::allocator::AlignableBlock<>::DoAllocLast()

-2

pw::GetAlignedSubspan()

-16

pw::allocator::ContiguousBlock<>::DoSplitFirst()

-22

pw::allocator::BasicBlock<>::Init()

DEL

-62

pw::allocator::AlignableBlock<>::DoCanAlloc()

DEL

-62

pw::allocator::BlockWithLayout<>::DoResize()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocFirst()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocLast()

DEL

-40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator17DetailedBlockImplINS2_23DetailedBlockParametersIjNS2_21GenericFastSortedItemEEEEELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleISB_OT_EE5valueEiE4typeELi0EEESF_

+8

pw::allocator::ContiguousBlock<>::DoMergeNext()

DEL

-38

pw::allocator::AllocatableBlock<>::AllocLast()

DEL

-32

pw::allocator::PoisonableBlock<>::DoSplitLast()

DEL

-30

pw::allocator::DetailedBlockImpl<>::SetNext()

DEL

-28

pw::allocator::PoisonableBlock<>::DoSplitFirst()

DEL

-16

pw::allocator::ContiguousBlock<>::DoSplitLast()

DEL

-16

pw::allocator::PoisonableBlock<>::DoMergeNext()

+40

pw::allocator::size_report::Measure()

+6

operator delete()

NEW

+142

pw::allocator::BlockAllocator<>::DoGetInfo()

NEW

+128

pw::allocator::BlockAllocator<>::DoAllocate()

NEW

+126

pw::allocator::BlockAllocator<>::DeallocateBlock()

NEW

+124

pw::Allocator::DoReallocate()

NEW

+116

pw::allocator::BlockAllocator<>::DoResize()

NEW

+90

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+88

pw::allocator::BucketAllocator<>::BucketAllocator()

NEW

+80

pw::allocator::BlockAllocator<>::Init()

NEW

+72

pw::allocator::BlockAllocator<>

NEW

+72

pw::allocator::BucketAllocator<>

NEW

+72

pw::allocator::BucketAllocator<>::ChooseBlock()

NEW

+66

pw::allocator::BucketAllocator<>::~BucketAllocator()

NEW

+44

pw::allocator::UnorderedBucket<>::DoRemoveCompatible()

NEW

+42

_ZNK2pw9allocator14BlockAllocatorINS0_10SmallBlockEE15FromUsableSpaceIPvEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES8_

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

pw::Result<>::operator->()

NEW

+40

pw::allocator::BlockAllocator<>::UpdateLast()

NEW

+40

pw::allocator::internal::BucketBase<>::set_max_inner_size()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+40

pw::containers::internal::GenericIntrusiveList<>::remove_if<>()

NEW

+38

pw::allocator::BlockAllocator<>::DoDeallocate()

NEW

+36

pw::allocator::BucketAllocator<>::RecycleBlock()

NEW

+36

pw::allocator::BucketAllocator<>::ReserveBlock()

NEW

+34

pw::allocator::internal::BucketBase<>::FindPrevIf<>()

NEW

+32

pw::Allocator::Reallocate()

NEW

+28

pw::allocator::IterableBlock<>::Iterator::operator++()

NEW

+26

pw::Allocator::Resize()

NEW

+26

pw::allocator::internal::BucketBase<>::Add()

NEW

+26

std::__2::array<>::~array()

NEW

+24

pw::containers::internal::GenericIntrusiveList<>::~GenericIntrusiveList()

NEW

+24

std::__2::array<>::array()

NEW

+22

pw::allocator::UnorderedBucket<>::~UnorderedBucket()

NEW

+22

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+22

pw::allocator::internal::BucketBase<>::Remove()

NEW

+20

pw::containers::internal::IntrusiveListItemBase<>::~IntrusiveListItemBase()

NEW

+18

pw::allocator::UnorderedBucket<>::DoAdd()

NEW

+16

pw::containers::internal::GenericIntrusiveList<>::clear()

NEW

+14

pw::allocator::BlockAllocator<>::~BlockAllocator()

NEW

+14

pw::containers::internal::GenericIntrusiveList<>::remove()

NEW

+12

pw::allocator::UnorderedBucket<>::DoRemove()

NEW

+12

pw::allocator::size_report::MeasureBlockAllocator()

NEW

+10

pw::allocator::BasicBlock<>::IsValid()

NEW

+4

pw::Allocator::DoResize()

NEW

+4

pw::allocator::BlockAllocator<>::DoGetAllocated()

NEW

+4

pw::allocator::BlockAllocator<>::Flush()

NEW

+4

pw::allocator::BlockAllocator<>::RecycleBlock()

NEW

+2

__cxa_pure_virtual

NEW

+2

pw::allocator::BlockAllocator<>::ReserveBlock()

+1,152

RAM

NEW

+72

pw::allocator::size_report::Measure()::allocator

+72

DlAllocator

FLASH

+624

[section .rodata]

DEL

-174

pw::allocator::size_report::MeasureBlock<>()

-4

pw::allocator::AllocatableBlock<>::DoResize()

DEL

-160

pw::allocator::AllocatableBlock<>::DoAllocLast()

DEL

-132

pw::allocator::AlignableBlock<>::DoAllocFirst()

DEL

-100

pw::allocator::AlignableBlock<>::DoAllocAligned()

-4

pw::allocator::AllocatableBlock<>::DoAllocFirst()

DEL

-92

pw::allocator::BlockWithLayout<>::DoFree()

-6

pw::allocator::AllocatableBlock<>::DoFree()

DEL

-76

pw::allocator::AlignableBlock<>::DoAllocLast()

-2

pw::GetAlignedSubspan()

-16

pw::allocator::ContiguousBlock<>::DoSplitFirst()

-22

pw::allocator::BasicBlock<>::Init()

DEL

-62

pw::allocator::AlignableBlock<>::DoCanAlloc()

DEL

-62

pw::allocator::BlockWithLayout<>::DoResize()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocFirst()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocLast()

DEL

-40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator17DetailedBlockImplINS2_23DetailedBlockParametersIjNS2_21GenericFastSortedItemEEEEELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleISB_OT_EE5valueEiE4typeELi0EEESF_

+8

pw::allocator::ContiguousBlock<>::DoMergeNext()

DEL

-38

pw::allocator::AllocatableBlock<>::AllocLast()

DEL

-32

pw::allocator::PoisonableBlock<>::DoSplitLast()

DEL

-30

pw::allocator::DetailedBlockImpl<>::SetNext()

DEL

-28

pw::allocator::PoisonableBlock<>::DoSplitFirst()

DEL

-16

pw::allocator::ContiguousBlock<>::DoSplitLast()

DEL

-16

pw::allocator::PoisonableBlock<>::DoMergeNext()

+44

pw::allocator::size_report::Measure()

+6

operator delete()

+12

vClearInterruptMaskFromISR

NEW

+252

pw::allocator::DlAllocator<>::ChooseBlock()

NEW

+228

pw::allocator::DlAllocator<>::DlAllocator()

NEW

+188

pw::containers::internal::AATree<>::InsertImpl()

NEW

+184

pw::containers::internal::AATreeItem::Rebalance()

NEW

+144

pw::containers::internal::AATreeIterator<>::operator++()

NEW

+142

pw::allocator::BlockAllocator<>::DoGetInfo()

NEW

+136

pw::containers::internal::AATreeItem::Unmap()

NEW

+128

pw::allocator::BlockAllocator<>::DoAllocate()

NEW

+126

pw::allocator::BlockAllocator<>::DeallocateBlock()

NEW

+124

pw::Allocator::DoReallocate()

NEW

+124

pw::allocator::DlAllocator<>::FindNextAvailable()

NEW

+116

pw::allocator::BlockAllocator<>::DoResize()

NEW

+108

pw::allocator::DlAllocator<>::GetIndex()

NEW

+98

pw::containers::internal::AATree<>::insert()

NEW

+98

std::__2::array<>::~array()

NEW

+92

pw::allocator::FastSortedBucket<>::DoRemove()

NEW

+92

pw::allocator::FastSortedBucket<>::RemoveImpl<>()

NEW

+90

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+90

pw::containers::internal::AATreeItem::Split()

NEW

+88

pw::allocator::DlAllocator<>::ReserveBlock()

NEW

+84

pw::allocator::DlAllocator<>::RecycleBlock()

NEW

+84

pw::containers::internal::AATree<>::GetLowerBoundImpl()

NEW

+84

pw::containers::internal::AATree<>::GetUpperBoundImpl()

NEW

+80

pw::allocator::BlockAllocator<>::Init()

NEW

+80

std::__2::array<>::array()

NEW

+78

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

NEW

+76

pw::allocator::DlAllocator<>::ReleaseFastBins()

NEW

+76

pw::allocator::DlAllocator<>::~DlAllocator()

NEW

+76

pw::allocator::internal::BucketBase<>::set_max_inner_size()

NEW

+72

pw::allocator::BlockAllocator<>

NEW

+72

pw::allocator::DlAllocator<>

NEW

+68

pw::containers::internal::AATreeItem::Skew()

NEW

+62

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_8internal10BucketBaseINS3_16FastSortedBucketIS5_EES5_S6_E21MakeCanAllocPredicateENS3_6LayoutEEUlRS6_E_EET_SH_SH_T0_

NEW

+60

pw::allocator::internal::BucketBase<>::Add()

NEW

+56

pw::containers::internal::AATree<>::AATree()

NEW

+56

pw::containers::internal::GenericAATree::erase_one()

NEW

+50

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_16FastSortedBucketIS5_E8DoRemoveERS5_EUlRS6_E_EET_SE_SE_T0_

NEW

+50

pw::containers::internal::AATreeItem::Clear()

NEW

+46

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+46

pw::allocator::internal::BucketBase<>::Remove()

NEW

+44

pw::PackedPtr<>::set()

NEW

+44

pw::PackedPtr<>::set_packed_value()

NEW

+44

pw::allocator::UnorderedBucket<>::DoRemoveCompatible()

NEW

+44

pw::containers::internal::GenericAATree::end()

NEW

+42

_ZNK2pw9allocator14BlockAllocatorINS0_10SmallBlockEE15FromUsableSpaceIPvEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES8_

NEW

+42

pw::containers::internal::AATreeItem::GetPredecessor()

NEW

+42

pw::containers::internal::AATreeItem::GetSuccessor()

NEW

+42

pw::containers::internal::AATreeItem::IsMapped()

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

fit::internal::target<>::ops

NEW

+40

pw::Result<>::operator->()

NEW

+40

pw::allocator::BlockAllocator<>::UpdateLast()

NEW

+40

pw::allocator::DlAllocator<>::DeallocateBlock()

NEW

+40

pw::containers::internal::AATreeItem::SetLevel()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+40

pw::containers::internal::GenericIntrusiveList<>::remove_if<>()

NEW

+38

pw::allocator::BlockAllocator<>::DoDeallocate()

NEW

+38

pw::allocator::DlAllocator<>::UpdateBitmaps()

NEW

+38

pw::allocator::FastSortedBucket<>::DoRemoveCompatible()

NEW

+38

pw::containers::internal::AATreeItem::Replace()

NEW

+36

pw::containers::internal::AATree<>::equal_range()

NEW

+34

pw::allocator::internal::BucketBase<>::FindPrevIf<>()

NEW

+34

pw::containers::internal::AATree<>::lower_bound()

NEW

+34

pw::containers::internal::AATree<>::upper_bound()

NEW

+32

pw::Allocator::Reallocate()

NEW

+32

pw::containers::internal::AATree<>::~AATree()

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

pw::containers::internal::AATreeItem::SetRight()

NEW

+28

pw::allocator::IterableBlock<>::Iterator::operator++()

NEW

+28

pw::containers::internal::AATreeItem::SetLeft()

NEW

+24

fit::internal::target<>::invoke()

NEW

+24

pw::Allocator::Resize()

NEW

+24

pw::allocator::FastSortedBucket<>::DoAdd()

NEW

+24

pw::containers::internal::AATreeItem::GetLevel()

NEW

+24

pw::containers::internal::GenericIntrusiveList<>::~GenericIntrusiveList()

NEW

+22

pw::allocator::FastSortedBucket<>::~FastSortedBucket()

NEW

+22

pw::allocator::UnorderedBucket<>::~UnorderedBucket()

NEW

+20

pw::IntrusiveMultiMap<>::erase()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+20

pw::allocator::FastSortedBucket<>::FastSortedBucket()

NEW

+20

pw::allocator::internal::BucketBase<>::RemoveAny()

NEW

+20

pw::containers::internal::GenericAATree::clear()

NEW

+20

pw::containers::internal::IntrusiveListItemBase<>::~IntrusiveListItemBase()

NEW

+18

pw::IntrusiveMultiMap<>::end()

NEW

+18

pw::allocator::UnorderedBucket<>::DoAdd()

NEW

+18

pw::containers::internal::GenericAATree::~GenericAATree()

NEW

+16

_ZNSt3__28__fill_nB8nn210000IPjjjEET_S2_T0_RKT1_

NEW

+16

pw::allocator::UnorderedBucket<>::DoRemoveAny()

NEW

+16

pw::containers::internal::GenericAATree::SetRoot()

NEW

+16

pw::containers::internal::GenericIntrusiveList<>::clear()

NEW

+14

pw::allocator::BlockAllocator<>::~BlockAllocator()

NEW

+14

pw::containers::internal::AATreeItem::GetLeftmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRightmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRoot()

NEW

+14

pw::containers::internal::GenericIntrusiveList<>::remove()

NEW

+12

_ZNSt3__25arrayIjLj4EE4fillB8nn210000ERKj

NEW

+12

pw::allocator::UnorderedBucket<>::DoRemove()

NEW

+12

pw::allocator::size_report::MeasureBlockAllocator()

NEW

+10

pw::IntrusiveForwardList<>::pop_front()

NEW

+10

pw::allocator::BasicBlock<>::IsValid()

NEW

+10

pw::containers::internal::AATreeItem::Reset()

NEW

+8

pw::IntrusiveMultiMap<>::IntrusiveMultiMap()

NEW

+8

pw::allocator::DlAllocator<>::Flush()

NEW

+6

fit::internal::inline_trivial_target_move<>()

NEW

+4

pw::Allocator::DoResize()

NEW

+4

pw::allocator::BlockAllocator<>::DoGetAllocated()

NEW

+4

pw::allocator::BlockAllocator<>::Flush()

NEW

+2

__cxa_pure_virtual

NEW

+2

fit::internal::inline_target_get()

NEW

+2

pw::allocator::BlockAllocator<>::RecycleBlock()

NEW

+2

pw::allocator::BlockAllocator<>::ReserveBlock()

+5,264

RAM

-1

claimed

NEW

+2,401

pw::allocator::size_report::Measure()::allocator

+2,400

FirstFitAllocator

FLASH

+100

[section .rodata]

DEL

-174

pw::allocator::size_report::MeasureBlock<>()

-4

pw::allocator::AllocatableBlock<>::DoResize()

DEL

-132

pw::allocator::AlignableBlock<>::DoAllocFirst()

DEL

-100

pw::allocator::AlignableBlock<>::DoAllocAligned()

-4

pw::allocator::AllocatableBlock<>::DoAllocFirst()

DEL

-92

pw::allocator::BlockWithLayout<>::DoFree()

-6

pw::allocator::AllocatableBlock<>::DoFree()

DEL

-76

pw::allocator::AlignableBlock<>::DoAllocLast()

-2

pw::GetAlignedSubspan()

-16

pw::allocator::ContiguousBlock<>::DoSplitFirst()

-22

pw::allocator::BasicBlock<>::Init()

DEL

-62

pw::allocator::AlignableBlock<>::DoCanAlloc()

DEL

-62

pw::allocator::BlockWithLayout<>::DoResize()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocFirst()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocLast()

DEL

-40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator17DetailedBlockImplINS2_23DetailedBlockParametersIjNS2_21GenericFastSortedItemEEEEELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleISB_OT_EE5valueEiE4typeELi0EEESF_

+8

pw::allocator::ContiguousBlock<>::DoMergeNext()

DEL

-32

pw::allocator::PoisonableBlock<>::DoSplitLast()

DEL

-30

pw::allocator::DetailedBlockImpl<>::SetNext()

DEL

-28

pw::allocator::PoisonableBlock<>::DoSplitFirst()

+34

pw::containers::internal::GenericIntrusiveList<>::insert_after()

+2

pw::allocator::ContiguousBlock<>::DoSplitLast()

DEL

-16

pw::allocator::PoisonableBlock<>::DoMergeNext()

+44

pw::allocator::size_report::Measure()

+4

__bi_84

+6

operator delete()

+8

vClearInterruptMaskFromISR

NEW

+142

pw::allocator::BlockAllocator<>::DoGetInfo()

NEW

+128

pw::allocator::BlockAllocator<>::DoAllocate()

NEW

+126

pw::allocator::BlockAllocator<>::DeallocateBlock()

NEW

+124

pw::Allocator::DoReallocate()

NEW

+116

pw::allocator::BlockAllocator<>::DoResize()

NEW

+90

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+80

pw::allocator::BlockAllocator<>::Init()

NEW

+72

pw::allocator::BlockAllocator<>

NEW

+72

pw::allocator::FirstFitAllocator<>

NEW

+72

pw::allocator::FirstFitAllocator<>::ChooseBlock()

NEW

+72

pw::allocator::SequencedBucket<>::DoRemove()

NEW

+70

pw::allocator::SequencedBucket<>::DoRemoveCompatible()

NEW

+64

pw::allocator::FirstFitAllocator<>::FirstFitAllocator()

NEW

+58

pw::allocator::SequencedBucket<>::DoAdd()

NEW

+50

pw::allocator::FirstFitAllocator<>::~FirstFitAllocator()

NEW

+44

pw::containers::internal::GenericIntrusiveList<>::remove_if<>()

NEW

+42

_ZNK2pw9allocator14BlockAllocatorINS0_10SmallBlockEE15FromUsableSpaceIPvEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES8_

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

pw::Result<>::operator->()

NEW

+40

pw::allocator::BlockAllocator<>::UpdateLast()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+38

pw::allocator::BlockAllocator<>::DoDeallocate()

NEW

+36

_ZNSt3__27find_ifB8nn210000IN2pw10containers8internal21BidirectionalIteratorINS1_9allocator13SequencedItemENS3_17IntrusiveListItemEEEZNS5_8internal10BucketBaseINS5_15SequencedBucketINS5_10SmallBlockEEESC_S6_E21MakeCanAllocPredicateENS5_6LayoutEEUlRS6_E_EET_SI_SI_T0_

NEW

+36

_ZNSt3__27find_ifB8nn210000INS_16reverse_iteratorIN2pw10containers8internal21BidirectionalIteratorINS2_9allocator13SequencedItemENS4_17IntrusiveListItemEEEEEZNS6_8internal10BucketBaseINS6_15SequencedBucketINS6_10SmallBlockEEESE_S7_E21MakeCanAllocPredicateENS6_6LayoutEEUlRS7_E_EET_SK_SK_T0_

NEW

+32

pw::Allocator::Reallocate()

NEW

+26

pw::Allocator::Resize()

NEW

+26

pw::allocator::IterableBlock<>::Iterator::operator++()

NEW

+26

pw::allocator::internal::BucketBase<>::Add()

NEW

+24

pw::containers::internal::GenericIntrusiveList<>::~GenericIntrusiveList()

NEW

+22

pw::allocator::SequencedBucket<>::~SequencedBucket()

NEW

+22

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+22

pw::allocator::internal::BucketBase<>::Remove()

NEW

+20

_ZNSt3__27find_ifB8nn210000INS_16reverse_iteratorIN2pw10containers8internal21BidirectionalIteratorINS2_9allocator13SequencedItemENS4_17IntrusiveListItemEEEEEZNS6_15SequencedBucketINS6_10SmallBlockEE5DoAddERSC_EUlRS7_E_EET_SH_SH_T0_

NEW

+20

_ZNSt3__27find_ifB8nn210000INS_16reverse_iteratorIN2pw10containers8internal21BidirectionalIteratorINS2_9allocator13SequencedItemENS4_17IntrusiveListItemEEEEEZNS6_15SequencedBucketINS6_10SmallBlockEE8DoRemoveERSC_EUlRS7_E_EET_SH_SH_T0_

NEW

+20

pw::containers::internal::GenericIntrusiveList<>::clear()

NEW

+20

pw::containers::internal::IntrusiveListItemBase<>::~IntrusiveListItemBase()

NEW

+14

_ZNSt3__27find_ifB8nn210000IN2pw10containers8internal21BidirectionalIteratorINS1_9allocator13SequencedItemENS3_17IntrusiveListItemEEEZNS5_15SequencedBucketINS5_10SmallBlockEE5DoAddERSA_EUlRS6_E0_EET_SF_SF_T0_

NEW

+14

pw::allocator::BlockAllocator<>::~BlockAllocator()

NEW

+14

pw::containers::internal::GenericIntrusiveList<>::remove()

NEW

+12

pw::allocator::size_report::MeasureBlockAllocator()

NEW

+10

pw::allocator::BasicBlock<>::IsValid()

NEW

+10

pw::allocator::FirstFitAllocator<>::RecycleBlock()

NEW

+10

pw::allocator::FirstFitAllocator<>::ReserveBlock()

NEW

+4

pw::Allocator::DoResize()

NEW

+4

pw::allocator::BlockAllocator<>::DoGetAllocated()

NEW

+4

pw::allocator::BlockAllocator<>::Flush()

NEW

+4

pw::allocator::BlockAllocator<>::RecycleBlock()

NEW

+2

__cxa_pure_virtual

NEW

+2

pw::allocator::BlockAllocator<>::ReserveBlock()

+1,328

RAM

NEW

+48

pw::allocator::size_report::Measure()::allocator

+48

TlsfAllocator

FLASH

+492

[section .rodata]

DEL

-174

pw::allocator::size_report::MeasureBlock<>()

-4

pw::allocator::AllocatableBlock<>::DoResize()

DEL

-160

pw::allocator::AllocatableBlock<>::DoAllocLast()

DEL

-132

pw::allocator::AlignableBlock<>::DoAllocFirst()

DEL

-100

pw::allocator::AlignableBlock<>::DoAllocAligned()

-4

pw::allocator::AllocatableBlock<>::DoAllocFirst()

DEL

-92

pw::allocator::BlockWithLayout<>::DoFree()

-6

pw::allocator::AllocatableBlock<>::DoFree()

DEL

-76

pw::allocator::AlignableBlock<>::DoAllocLast()

-2

pw::GetAlignedSubspan()

-16

pw::allocator::ContiguousBlock<>::DoSplitFirst()

-22

pw::allocator::BasicBlock<>::Init()

DEL

-62

pw::allocator::AlignableBlock<>::DoCanAlloc()

DEL

-62

pw::allocator::BlockWithLayout<>::DoResize()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocFirst()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocLast()

DEL

-40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator17DetailedBlockImplINS2_23DetailedBlockParametersIjNS2_21GenericFastSortedItemEEEEELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleISB_OT_EE5valueEiE4typeELi0EEESF_

+8

pw::allocator::ContiguousBlock<>::DoMergeNext()

DEL

-38

pw::allocator::AllocatableBlock<>::AllocLast()

DEL

-32

pw::allocator::PoisonableBlock<>::DoSplitLast()

DEL

-30

pw::allocator::DetailedBlockImpl<>::SetNext()

DEL

-28

pw::allocator::PoisonableBlock<>::DoSplitFirst()

DEL

-16

pw::allocator::ContiguousBlock<>::DoSplitLast()

DEL

-16

pw::allocator::PoisonableBlock<>::DoMergeNext()

+44

pw::allocator::size_report::Measure()

+4

__bi_84

+6

operator delete()

+12

vClearInterruptMaskFromISR

NEW

+192

pw::allocator::TlsfAllocator<>::TlsfAllocator()

NEW

+188

pw::containers::internal::AATree<>::InsertImpl()

NEW

+184

pw::allocator::TlsfAllocator<>::FindNextAvailable()

NEW

+184

pw::containers::internal::AATreeItem::Rebalance()

NEW

+168

pw::allocator::TlsfAllocator<>::ChooseBlock()

NEW

+144

pw::containers::internal::AATreeIterator<>::operator++()

NEW

+142

pw::allocator::BlockAllocator<>::DoGetInfo()

NEW

+136

pw::containers::internal::AATreeItem::Unmap()

NEW

+128

pw::allocator::BlockAllocator<>::DeallocateBlock()

NEW

+128

pw::allocator::BlockAllocator<>::DoAllocate()

NEW

+124

pw::Allocator::DoReallocate()

NEW

+116

pw::allocator::BlockAllocator<>::DoResize()

NEW

+98

pw::containers::internal::AATree<>::insert()

NEW

+92

pw::allocator::FastSortedBucket<>::DoRemove()

NEW

+92

pw::allocator::FastSortedBucket<>::RemoveImpl<>()

NEW

+90

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+90

pw::containers::internal::AATreeItem::Split()

NEW

+88

pw::allocator::TlsfAllocator<>::ReserveBlock()

NEW

+84

pw::containers::internal::AATree<>::GetLowerBoundImpl()

NEW

+84

pw::containers::internal::AATree<>::GetUpperBoundImpl()

NEW

+80

pw::allocator::BlockAllocator<>::Init()

NEW

+80

pw::allocator::TlsfAllocator<>::RecycleBlock()

NEW

+78

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

NEW

+76

std::__2::array<>::~array()

NEW

+72

pw::allocator::BlockAllocator<>

NEW

+72

pw::allocator::TlsfAllocator<>

NEW

+68

pw::allocator::TlsfAllocator<>::~TlsfAllocator()

NEW

+68

pw::containers::internal::AATreeItem::Skew()

NEW

+62

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_8internal10BucketBaseINS3_16FastSortedBucketIS5_EES5_S6_E21MakeCanAllocPredicateENS3_6LayoutEEUlRS6_E_EET_SH_SH_T0_

NEW

+62

pw::allocator::internal::BucketBase<>::FindPrevIf<>()

NEW

+60

pw::allocator::internal::BucketBase<>::Add()

NEW

+58

std::__2::array<>::array()

NEW

+56

pw::allocator::TlsfAllocator<>::MapToIndices()

NEW

+56

pw::containers::internal::AATree<>::AATree()

NEW

+56

pw::containers::internal::GenericAATree::erase_one()

NEW

+50

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_16FastSortedBucketIS5_E8DoRemoveERS5_EUlRS6_E_EET_SE_SE_T0_

NEW

+50

pw::allocator::TlsfAllocator<>::UpdateBitmaps()

NEW

+50

pw::containers::internal::AATreeItem::Clear()

NEW

+46

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+46

pw::allocator::internal::BucketBase<>::Remove()

NEW

+44

pw::PackedPtr<>::set()

NEW

+44

pw::PackedPtr<>::set_packed_value()

NEW

+44

pw::allocator::internal::SortedBucketBase<>::DoRemoveCompatible()

NEW

+42

_ZNK2pw9allocator14BlockAllocatorINS0_10SmallBlockEE15FromUsableSpaceIPvEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES8_

NEW

+42

pw::containers::internal::AATreeItem::GetPredecessor()

NEW

+42

pw::containers::internal::AATreeItem::GetSuccessor()

NEW

+42

pw::containers::internal::AATreeItem::IsMapped()

NEW

+42

pw::containers::internal::GenericAATree::end()

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

fit::internal::target<>::ops

NEW

+40

pw::Result<>::operator->()

NEW

+40

pw::allocator::BlockAllocator<>::UpdateLast()

NEW

+40

pw::containers::internal::AATreeItem::SetLevel()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+40

pw::containers::internal::GenericIntrusiveList<>::remove_if<>()

NEW

+38

pw::allocator::BlockAllocator<>::DoDeallocate()

NEW

+38

pw::allocator::FastSortedBucket<>::DoRemoveCompatible()

NEW

+38

pw::containers::internal::AATreeItem::Replace()

NEW

+36

pw::allocator::internal::BucketBase<>::set_max_inner_size()

NEW

+36

pw::containers::internal::AATree<>::equal_range()

NEW

+34

pw::containers::internal::AATree<>::lower_bound()

NEW

+34

pw::containers::internal::AATree<>::upper_bound()

NEW

+32

pw::Allocator::Reallocate()

NEW

+32

pw::allocator::internal::SortedBucketBase<>::DoAdd()

NEW

+32

pw::containers::internal::AATree<>::~AATree()

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

pw::containers::internal::AATreeItem::SetRight()

NEW

+28

pw::allocator::IterableBlock<>::Iterator::operator++()

NEW

+28

pw::containers::internal::AATreeItem::SetLeft()

NEW

+24

fit::internal::target<>::invoke()

NEW

+24

pw::Allocator::Resize()

NEW

+24

pw::allocator::FastSortedBucket<>::DoAdd()

NEW

+24

pw::allocator::internal::SortedBucketBase<>::~SortedBucketBase()

NEW

+24

pw::containers::internal::AATreeItem::GetLevel()

NEW

+24

pw::containers::internal::GenericIntrusiveList<>::~GenericIntrusiveList()

NEW

+22

pw::allocator::FastSortedBucket<>::~FastSortedBucket()

NEW

+20

pw::IntrusiveMultiMap<>::erase()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+20

pw::allocator::FastSortedBucket<>::FastSortedBucket()

NEW

+20

pw::containers::internal::GenericAATree::clear()

NEW

+20

pw::containers::internal::IntrusiveListItemBase<>::~IntrusiveListItemBase()

NEW

+18

pw::IntrusiveMultiMap<>::end()

NEW

+18

pw::containers::internal::GenericAATree::~GenericAATree()

NEW

+16

_ZNSt3__28__fill_nB8nn210000IPtjtEET_S2_T0_RKT1_

NEW

+16

pw::containers::internal::GenericAATree::SetRoot()

NEW

+16

pw::containers::internal::GenericIntrusiveList<>::clear()

NEW

+14

pw::allocator::BlockAllocator<>::~BlockAllocator()

NEW

+14

pw::containers::internal::AATreeItem::GetLeftmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRightmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRoot()

NEW

+14

pw::containers::internal::GenericIntrusiveList<>::remove()

NEW

+12

_ZNSt3__25arrayItLj10EE4fillB8nn210000ERKt

NEW

+12

pw::allocator::internal::SortedBucketBase<>::DoRemove()

NEW

+12

pw::allocator::size_report::MeasureBlockAllocator()

NEW

+10

pw::allocator::BasicBlock<>::IsValid()

NEW

+10

pw::containers::internal::AATreeItem::Reset()

NEW

+8

pw::IntrusiveMultiMap<>::IntrusiveMultiMap()

NEW

+6

fit::internal::inline_trivial_target_move<>()

NEW

+4

pw::Allocator::DoResize()

NEW

+4

pw::allocator::BlockAllocator<>::DoGetAllocated()

NEW

+4

pw::allocator::BlockAllocator<>::Flush()

NEW

+4

pw::allocator::BlockAllocator<>::RecycleBlock()

NEW

+2

__cxa_pure_virtual

NEW

+2

fit::internal::inline_target_get()

NEW

+2

pw::allocator::BlockAllocator<>::ReserveBlock()

+4,816

RAM

-1

claimed

NEW

+4,541

pw::allocator::size_report::Measure()::allocator

+4,540

WorstFitAllocator

FLASH

+360

[section .rodata]

DEL

-174

pw::allocator::size_report::MeasureBlock<>()

-4

pw::allocator::AllocatableBlock<>::DoResize()

DEL

-160

pw::allocator::AllocatableBlock<>::DoAllocLast()

DEL

-132

pw::allocator::AlignableBlock<>::DoAllocFirst()

DEL

-100

pw::allocator::AlignableBlock<>::DoAllocAligned()

-4

pw::allocator::AllocatableBlock<>::DoAllocFirst()

DEL

-92

pw::allocator::BlockWithLayout<>::DoFree()

-6

pw::allocator::AllocatableBlock<>::DoFree()

DEL

-76

pw::allocator::AlignableBlock<>::DoAllocLast()

-2

pw::GetAlignedSubspan()

-16

pw::allocator::ContiguousBlock<>::DoSplitFirst()

-22

pw::allocator::BasicBlock<>::Init()

DEL

-62

pw::allocator::AlignableBlock<>::DoCanAlloc()

DEL

-62

pw::allocator::BlockWithLayout<>::DoResize()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocFirst()

DEL

-48

pw::allocator::BlockWithLayout<>::DoAllocLast()

DEL

-40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator17DetailedBlockImplINS2_23DetailedBlockParametersIjNS2_21GenericFastSortedItemEEEEELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleISB_OT_EE5valueEiE4typeELi0EEESF_

+8

pw::allocator::ContiguousBlock<>::DoMergeNext()

DEL

-38

pw::allocator::AllocatableBlock<>::AllocLast()

DEL

-32

pw::allocator::PoisonableBlock<>::DoSplitLast()

DEL

-30

pw::allocator::DetailedBlockImpl<>::SetNext()

DEL

-28

pw::allocator::PoisonableBlock<>::DoSplitFirst()

DEL

-16

pw::allocator::ContiguousBlock<>::DoSplitLast()

DEL

-16

pw::allocator::PoisonableBlock<>::DoMergeNext()

+40

pw::allocator::size_report::Measure()

+6

operator delete()

+8

vClearInterruptMaskFromISR

NEW

+188

pw::containers::internal::AATree<>::InsertImpl()

NEW

+184

pw::containers::internal::AATreeItem::Rebalance()

NEW

+144

pw::containers::internal::AATreeIterator<>::operator++()

NEW

+142

pw::allocator::BlockAllocator<>::DoGetInfo()

NEW

+136

pw::containers::internal::AATreeItem::Unmap()

NEW

+128

pw::allocator::BlockAllocator<>::DoAllocate()

NEW

+126

pw::allocator::BlockAllocator<>::DeallocateBlock()

NEW

+124

pw::Allocator::DoReallocate()

NEW

+116

pw::allocator::BlockAllocator<>::DoResize()

NEW

+98

pw::containers::internal::AATree<>::insert()

NEW

+92

pw::allocator::FastSortedBucket<>::DoRemove()

NEW

+92

pw::allocator::FastSortedBucket<>::RemoveImpl<>()

NEW

+90

pw::allocator::ContiguousBlock<>::DoCheckInvariants()

NEW

+90

pw::containers::internal::AATreeItem::Split()

NEW

+84

pw::containers::internal::AATree<>::GetLowerBoundImpl()

NEW

+84

pw::containers::internal::AATree<>::GetUpperBoundImpl()

NEW

+80

pw::allocator::BlockAllocator<>::Init()

NEW

+72

pw::allocator::BlockAllocator<>

NEW

+72

pw::allocator::WorstFitAllocator<>

NEW

+72

pw::allocator::WorstFitAllocator<>::ChooseBlock()

NEW

+68

pw::allocator::WorstFitAllocator<>::WorstFitAllocator()

NEW

+68

pw::containers::internal::AATreeItem::Skew()

NEW

+62

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_8internal10BucketBaseINS3_16FastSortedBucketIS5_EES5_S6_E21MakeCanAllocPredicateENS3_6LayoutEEUlRS6_E_EET_SH_SH_T0_

NEW

+62

pw::allocator::internal::BucketBase<>::Add()

NEW

+62

pw::allocator::internal::BucketBase<>::FindPrevIf<>()

NEW

+58

pw::allocator::WorstFitAllocator<>::~WorstFitAllocator()

NEW

+56

pw::allocator::FastSortedBucket<>::FastSortedBucket()

NEW

+56

pw::containers::internal::AATree<>::AATree()

NEW

+56

pw::containers::internal::GenericAATree::erase_one()

NEW

+52

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

NEW

+50

_ZNSt3__27find_ifB8nn210000IN2pw17IntrusiveMultiMapIjNS1_9allocator14FastSortedItemINS3_10SmallBlockEEEE8iteratorEZNS3_16FastSortedBucketIS5_E8DoRemoveERS5_EUlRS6_E_EET_SE_SE_T0_

NEW

+50

pw::containers::internal::AATreeItem::Clear()

NEW

+48

pw::allocator::ReverseFastSortedBucket<>::ReverseFastSortedBucket()

NEW

+48

pw::allocator::internal::BucketBase<>::Remove()

NEW

+44

pw::PackedPtr<>::set()

NEW

+44

pw::PackedPtr<>::set_packed_value()

NEW

+44

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+44

pw::allocator::internal::SortedBucketBase<>::DoRemoveCompatible()

NEW

+44

pw::containers::internal::GenericAATree::end()

NEW

+42

_ZNK2pw9allocator14BlockAllocatorINS0_10SmallBlockEE15FromUsableSpaceIPvEEu13__add_pointerINS0_8internal9CopyConstIu16__remove_pointerIT_ES2_E4typeEES8_

NEW

+42

pw::containers::internal::AATreeItem::GetPredecessor()

NEW

+42

pw::containers::internal::AATreeItem::GetSuccessor()

NEW

+42

pw::containers::internal::AATreeItem::IsMapped()

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

_ZN2pw15internal_result12StatusOrDataIPNS_9allocator10SmallBlockELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS7_OT_EE5valueEiE4typeELi0EEESB_

NEW

+40

fit::internal::target<>::ops

NEW

+40

pw::Result<>::operator->()

NEW

+40

pw::allocator::BlockAllocator<>::UpdateLast()

NEW

+40

pw::containers::internal::AATreeItem::SetLevel()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+40

pw::containers::internal::GenericIntrusiveList<>::remove_if<>()

NEW

+38

pw::allocator::BlockAllocator<>::DoDeallocate()

NEW

+38

pw::containers::internal::AATreeItem::Replace()

NEW

+36

pw::allocator::ReverseFastSortedBucket<>::DoRemoveCompatible()

NEW

+36

pw::containers::internal::AATree<>::equal_range()

NEW

+34

pw::containers::internal::AATree<>::lower_bound()

NEW

+34

pw::containers::internal::AATree<>::upper_bound()

NEW

+32

pw::Allocator::Reallocate()

NEW

+32

pw::allocator::internal::SortedBucketBase<>::DoAdd()

NEW

+32

pw::containers::internal::AATree<>::~AATree()

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

pw::allocator::WorstFitAllocator<>::RecycleBlock()

NEW

+30

pw::containers::internal::AATreeItem::SetRight()

NEW

+28

pw::allocator::WorstFitAllocator<>::ReserveBlock()

NEW

+28

pw::containers::internal::AATreeItem::SetLeft()

NEW

+26

pw::allocator::IterableBlock<>::Iterator::operator++()

NEW

+26

pw::containers::internal::GenericAATree::begin()

NEW

+24

fit::internal::target<>::invoke()

NEW

+24

pw::Allocator::Resize()

NEW

+24

pw::allocator::FastSortedBucket<>::DoAdd()

NEW

+24

pw::containers::internal::AATreeItem::GetLevel()

NEW

+24

pw::containers::internal::GenericIntrusiveList<>::~GenericIntrusiveList()

NEW

+22

pw::allocator::FastSortedBucket<>::~FastSortedBucket()

NEW

+22

pw::allocator::internal::SortedBucketBase<>::~SortedBucketBase()

NEW

+20

pw::IntrusiveMultiMap<>::erase()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

pw::containers::internal::GenericAATree::clear()

NEW

+20

pw::containers::internal::IntrusiveListItemBase<>::~IntrusiveListItemBase()

NEW

+18

pw::IntrusiveMultiMap<>::begin()

NEW

+18

pw::IntrusiveMultiMap<>::end()

NEW

+18

pw::containers::internal::GenericAATree::~GenericAATree()

NEW

+16

pw::containers::internal::GenericAATree::SetRoot()

NEW

+16

pw::containers::internal::GenericIntrusiveList<>::clear()

NEW

+14

pw::allocator::BlockAllocator<>::~BlockAllocator()

NEW

+14

pw::containers::internal::AATreeItem::GetLeftmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRightmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRoot()

NEW

+14

pw::containers::internal::GenericIntrusiveList<>::remove()

NEW

+12

pw::allocator::internal::SortedBucketBase<>::DoRemove()

NEW

+12

pw::allocator::size_report::MeasureBlockAllocator()

NEW

+10

pw::allocator::BasicBlock<>::IsValid()

NEW

+10

pw::containers::internal::AATreeItem::Reset()

NEW

+6

fit::internal::inline_trivial_target_move<>()

NEW

+4

pw::Allocator::DoResize()

NEW

+4

pw::allocator::BlockAllocator<>::DoGetAllocated()

NEW

+4

pw::allocator::BlockAllocator<>::RecycleBlock()

NEW

+2

__cxa_pure_virtual

NEW

+2

fit::internal::inline_target_get()

NEW

+2

pw::allocator::BlockAllocator<>::Flush()

NEW

+2

pw::allocator::BlockAllocator<>::ReserveBlock()

+3,912

RAM

NEW

+76

pw::allocator::size_report::Measure()::allocator

+76

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 BlockAllocator. These are measured relative to the empty implementation measured above.

Label

Segment

Delta

BuddyAllocator

FLASH

+736

[section .rodata]

+40

pw::Result<>::value()

-2

pw::GetAlignedSubspan()

+40

pw::allocator::size_report::Measure()

+4

__bi_84

+2

main

NEW

+208

pw::allocator::internal::GenericBuddyAllocator::Deallocate()

NEW

+192

pw::allocator::internal::GenericBuddyAllocator::Init()

NEW

+146

pw::allocator::internal::GenericBuddyAllocator::Allocate()

NEW

+144

pw::allocator::BuddyAllocator<>::DoGetInfo()

NEW

+124

pw::Allocator::DoReallocate()

NEW

+108

pw::allocator::internal::GenericBuddyAllocator::CrashIfAllocated()

NEW

+76

pw::allocator::internal::GenericBuddyAllocator::GetLayout()

NEW

+74

pw::allocator::BuddyAllocator<>::BuddyAllocator()

NEW

+52

pw::allocator::BuddyAllocator<>

NEW

+50

pw::allocator::BuddyAllocator<>::~BuddyAllocator()

NEW

+50

pw::allocator::internal::GenericBuddyAllocator::GenericBuddyAllocator()

NEW

+44

pw::allocator::UnorderedBucket<>::DoRemoveCompatible()

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

pw::Result<>::operator->()

NEW

+40

pw::allocator::internal::BucketBase<>::set_max_inner_size()

NEW

+40

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+40

pw::containers::internal::GenericIntrusiveList<>::remove_if<>()

NEW

+38

pw::allocator::internal::BucketBase<>::Add()

NEW

+36

pw::allocator::Hardening::Decrement<>()

NEW

+36

pw::allocator::Hardening::Increment<>()

NEW

+34

pw::allocator::internal::BucketBase<>::FindPrevIf<>()

NEW

+32

pw::Allocator::Reallocate()

NEW

+32

pw::allocator::internal::BuddyBlock::Split()

NEW

+30

pw::allocator::internal::BucketBase<>::Remove()

NEW

+28

pw::allocator::internal::BuddyBlock::Merge()

NEW

+26

pw::Allocator::Resize()

NEW

+26

pw::allocator::Layout::Extend()

NEW

+26

std::__2::array<>::~array()

NEW

+24

__aeabi_uidivmod

NEW

+24

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+24

pw::containers::internal::GenericIntrusiveList<>::~GenericIntrusiveList()

NEW

+24

std::__2::array<>::array()

NEW

+22

pw::allocator::UnorderedBucket<>::DoAdd()

NEW

+22

pw::allocator::UnorderedBucket<>::~UnorderedBucket()

NEW

+22

pw::allocator::internal::BuddyBlock::CanAlloc()

NEW

+20

pw::allocator::UnorderedBucket<>::DoRemove()

NEW

+20

pw::allocator::internal::BucketBase<>::RemoveAny()

NEW

+20

pw::containers::internal::IntrusiveListItemBase<>::~IntrusiveListItemBase()

NEW

+18

_ZN2pw9allocator10BasicBlockINS0_8internal10BuddyBlockEE24UsableSpaceUncheckedImplIPS4_EEu13__add_pointerINS2_9CopyConstIu16__remove_pointerIT_ESt4byteE4typeEES8_

NEW

+18

pw::allocator::UnorderedBucket<>::DoRemoveAny()

NEW

+18

pw::allocator::internal::BucketBase<>::GetBlockFromPrev<>()

NEW

+16

_ZN2pw9allocator10BasicBlockINS0_8internal10BuddyBlockEE15FromUsableSpaceIPKvEEu13__add_pointerINS2_9CopyConstIu16__remove_pointerIT_ES3_E4typeEES9_

NEW

+16

_ZN2pw9allocator10BasicBlockINS0_8internal10BuddyBlockEE15FromUsableSpaceIPNS0_13UnorderedItemEEEu13__add_pointerINS2_9CopyConstIu16__remove_pointerIT_ES3_E4typeEES9_

NEW

+16

_ZN2pw9allocator10BasicBlockINS0_8internal10BuddyBlockEE15FromUsableSpaceIPSt4byteEEu13__add_pointerINS2_9CopyConstIu16__remove_pointerIT_ES3_E4typeEES9_

NEW

+16

_ZN2pw9allocator10BasicBlockINS0_8internal10BuddyBlockEE15FromUsableSpaceIPvEEu13__add_pointerINS2_9CopyConstIu16__remove_pointerIT_ES3_E4typeEES8_

NEW

+16

pw::allocator::BasicBlock<>::InnerSizeFromOuterSize()

NEW

+16

pw::allocator::BasicBlock<>::OuterSizeFromInnerSize()

NEW

+16

pw::allocator::size_report::GetBuffer()

NEW

+16

pw::containers::internal::GenericIntrusiveList<>::clear()

NEW

+14

pw::allocator::BasicBlock<>::InnerSizeUnchecked()

NEW

+14

pw::containers::internal::GenericIntrusiveList<>::remove()

NEW

+12

pw::Deallocator::DoDeallocate()

NEW

+12

pw::allocator::BuddyAllocator<>::DoAllocate()

NEW

+12

pw::allocator::size_report::MeasureAllocator()

NEW

+10

pw::IntrusiveForwardList<>::pop_front()

NEW

+10

pw::allocator::BuddyAllocator<>::DoDeallocate()

NEW

+8

pw::Allocator::DoGetAllocated()

NEW

+8

pw::Allocator::DoResize()

+3,136

RAM

NEW

+72

pw::allocator::size_report::Measure()::allocator

+72

BumpAllocator

FLASH

+12

[section .rodata]

-2

pw::GetAlignedSubspan()

+40

pw::allocator::size_report::Measure()

+4

vClearInterruptMaskFromISR

NEW

+124

pw::Allocator::DoReallocate()

NEW

+52

pw::allocator::BumpAllocator

NEW

+50

pw::allocator::BumpAllocator::DoAllocate()

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

pw::Result<>::operator->()

NEW

+40

pw::allocator::BumpAllocator::BumpAllocator()

NEW

+38

pw::allocator::BumpAllocator::~BumpAllocator()

NEW

+32

pw::Allocator::Reallocate()

NEW

+26

pw::Allocator::Resize()

NEW

+24

pw::allocator::BumpAllocator::Reset()

NEW

+18

pw::allocator::BumpAllocator::Init()

NEW

+16

pw::allocator::size_report::GetBuffer()

NEW

+14

pw::Deallocator::DoGetInfo()

NEW

+12

pw::allocator::size_report::MeasureAllocator()

NEW

+10

pw::Deallocator::DoDeallocate()

NEW

+8

pw::Allocator::DoResize()

NEW

+6

pw::allocator::BumpAllocator::DoGetAllocated()

NEW

+4

pw::allocator::BumpAllocator::DoDeallocate()

+608

RAM

NEW

+28

pw::allocator::size_report::Measure()::allocator

+28

LibCAllocator

FLASH

-2

pw::GetAlignedSubspan()

+4

pw::allocator::size_report::Measure()

+4

vClearInterruptMaskFromISR

+4

__bi_84

-2

__llvm_libc_21_0_0_git::internal::exit()

NEW

+442

__llvm_libc_21_0_0_git::Block::allocate()

NEW

+406

__llvm_libc_21_0_0_git::FreeTrie::find_best_fit()

NEW

+374

__llvm_libc_21_0_0_git::FreeListHeap::allocate_impl()

NEW

+172

__llvm_libc_21_0_0_git::FreeListHeap::realloc()

NEW

+52

pw::allocator::LibCAllocator

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+32

pw::Allocator::Reallocate()

NEW

+24

__aeabi_uidivmod

NEW

+24

malloc

NEW

+24

realloc

NEW

+20

pw::allocator::LibCAllocator::DoDeallocate()

NEW

+20

pw::allocator::LibCAllocator::DoReallocate()

NEW

+18

pw::allocator::LibCAllocator::DoAllocate()

NEW

+14

pw::Deallocator::DoGetInfo()

NEW

+12

pw::allocator::size_report::MeasureAllocator()

NEW

+10

pw::Allocator::DoReallocate()

NEW

+10

pw::allocator::LibCAllocator::~LibCAllocator()

NEW

+8

pw::Allocator::DoGetAllocated()

NEW

+8

pw::Allocator::DoResize()

NEW

+8

pw::allocator::GetLibCAllocator()

NEW

+2

pw::Deallocator::~Deallocator()

+1,728

Forwarding allocators implementations#

The following are code sizes for each of the provided “forwarding” allocators as described by Forwarding allocator concept. These are measured by having the forwarding allocator wrap a FirstFitAllocator, and are measured relative to that implementation.

Label

Segment

Delta

FallbackAllocator

FLASH

+52

[section .rodata]

+56

pw::allocator::size_report::Measure()

+2

pw::containers::internal::AATreeItem::Clear()

DEL

-12

pw::allocator::size_report::MeasureBlockAllocator()

NEW

+192

pw::allocator::FallbackAllocator::DoGetInfo()

NEW

+64

pw::allocator::FallbackAllocator::FallbackAllocator()

NEW

+52

pw::allocator::FallbackAllocator

NEW

+52

pw::allocator::FallbackAllocator::DoDeallocate()

NEW

+46

pw::allocator::FallbackAllocator::DoAllocate()

NEW

+36

pw::allocator::FallbackAllocator::DoResize()

NEW

+26

pw::Deallocator::Recognizes()

NEW

+26

pw::allocator::FallbackAllocator::DoGetAllocated()

NEW

+12

pw::allocator::size_report::MeasureAllocator()

NEW

+10

pw::allocator::FallbackAllocator::~FallbackAllocator()

NEW

+2

pw::Deallocator::~Deallocator()

+616

RAM

DEL

-68

pw::allocator::size_report::Measure()::allocator

NEW

+65

pw::allocator::size_report::Measure()::primary

NEW

+65

pw::allocator::size_report::Measure()::secondary

NEW

+18

pw::allocator::size_report::Measure()::alloc

+80

AsPmrAllocator

FLASH

+128

[section .rodata]

DEL

-442

__llvm_libc_21_0_0_git::Block::allocate()

DEL

-406

__llvm_libc_21_0_0_git::FreeTrie::find_best_fit()

DEL

-374

__llvm_libc_21_0_0_git::FreeListHeap::allocate_impl()

+52

pw::allocator::size_report::Measure()

+6

std::__2::vector<>::__emplace_back_slow_path<>()

+12

std::__2::vector<>::__swap_out_circular_buffer()

DEL

-56

_ZNKSt3__26vectorIN2pw9allocator11size_report3BarENS_9allocatorIS4_EEE11__recommendB8nn210000Ej

+2

pw::containers::internal::AATreeItem::Clear()

+2

std::__2::vector<>::emplace_back<>()

DEL

-34

_ZN2pw9Allocator3NewINS_9allocator11size_report3BarETpTnRiJEJiEEENSt3__29enable_ifIXntsr3stdE10is_array_vIT_EEPS8_E4typeEDpOT1_

DEL

-28

_ZNSt3__29allocatorIN2pw9allocator11size_report3BarEE8allocateB8nn210000Ej

+8

std::__2::__split_buffer<>::~__split_buffer()

DEL

-24

__aeabi_uidivmod

DEL

-24

malloc

+2

pw::Allocator::Resize()

DEL

-22

_ZNSt3__26vectorIN2pw9allocator11size_report3BarENS_9allocatorIS4_EEE16__destroy_vectorclB8nn210000Ev

DEL

-16

_ZNSt3__26vectorIN2pw9allocator11size_report3BarENS_9allocatorIS4_EEED2B8nn210000Ev

-4

__bi_84

DEL

-14

_ZNSt3__214__split_bufferIN2pw9allocator11size_report3BarERNS_9allocatorIS4_EEE17__destruct_at_endB8nn210000EPS4_

DEL

-12

_ZNSt3__26vectorIN2pw9allocator11size_report3BarENS_9allocatorIS4_EEE20__throw_length_errorB8nn210000Ev

DEL

-10

_ZNSt3__214__split_bufferIN2pw9allocator11size_report3BarERNS_9allocatorIS4_EEE5clearB8nn210000Ev

+2

__llvm_libc_21_0_0_git::internal::exit()

DEL

-8

operator new()

+8

vClearInterruptMaskFromISR

NEW

+64

pw::allocator::internal::MemoryResource::do_allocate()

NEW

+56

_ZNKSt3__26vectorIN2pw9allocator11size_report3BarENS_3pmr21polymorphic_allocatorIS4_EEE11__recommendB8nn210000Ej

NEW

+36

_ZNSt3__23pmr21polymorphic_allocatorIN2pw9allocator11size_report3BarEE8allocateB8nn210000Ej

NEW

+28

_ZNSt3__26vectorIN2pw9allocator11size_report3BarENS_3pmr21polymorphic_allocatorIS4_EEE16__destroy_vectorclB8nn210000Ev

NEW

+28

pw::allocator::internal::MemoryResource

NEW

+16

_ZNSt3__26vectorIN2pw9allocator11size_report3BarENS_3pmr21polymorphic_allocatorIS4_EEED2B8nn210000Ev

NEW

+16

pw::allocator::internal::MemoryResource::do_deallocate()

NEW

+14

_ZNSt3__214__split_bufferIN2pw9allocator11size_report3BarERNS_3pmr21polymorphic_allocatorIS4_EEE17__destruct_at_endB8nn210000EPS4_

NEW

+14

pw::allocator::internal::MemoryResource::~MemoryResource()

NEW

+12

_ZNSt3__26vectorIN2pw9allocator11size_report3BarENS_3pmr21polymorphic_allocatorIS4_EEE20__throw_length_errorB8nn210000Ev

NEW

+10

_ZNSt3__214__split_bufferIN2pw9allocator11size_report3BarERNS_3pmr21polymorphic_allocatorIS4_EEE5clearB8nn210000Ev

NEW

+8

pw::allocator::internal::MemoryResource::do_is_equal()

NEW

+2

std::__2::pmr::memory_resource::~memory_resource()

-948

RAM

-3

pw::allocator::size_report::Measure()::base

NEW

+15

pw::allocator::size_report::Measure()::alloc

+12

SynchronizedAllocator<sync::InterruptSpinLock>

FLASH

+44

pw::allocator::size_report::Measure()

+2

pw::Allocator::Reallocate()

+4

__bi_84

DEL

-12

pw::allocator::size_report::MeasureBlockAllocator()

+4

vClearInterruptMaskFromISR

NEW

+52

pw::allocator::SynchronizedAllocator<>

NEW

+50

pw::allocator::SynchronizedAllocator<>::DoAllocate()

NEW

+48

pw::allocator::SynchronizedAllocator<>::DoDeallocate()

NEW

+44

pw::allocator::SynchronizedAllocator<>::DoReallocate()

NEW

+42

pw::allocator::SynchronizedAllocator<>::DoGetInfo()

NEW

+40

pw::allocator::SynchronizedAllocator<>::DoResize()

NEW

+34

pw::allocator::SynchronizedAllocator<>::DoGetAllocated()

NEW

+12

pw::allocator::size_report::MeasureAllocator()

NEW

+10

pw::allocator::SynchronizedAllocator<>::~SynchronizedAllocator()

NEW

+2

pw::Deallocator::~Deallocator()

+376

RAM

DEL

-68

pw::allocator::size_report::Measure()::allocator

NEW

+65

pw::allocator::size_report::Measure()::base

NEW

+31

pw::allocator::size_report::Measure()::alloc

+28

SynchronizedAllocator<sync::Mutex>

FLASH

+100

[section .rodata]

+24

pw::allocator::size_report::Measure()

-4

operator delete()

DEL

-12

pw::allocator::size_report::MeasureBlockAllocator()

NEW

+372

xQueueSemaphoreTake

NEW

+168

vTaskPriorityDisinheritAfterTimeout

NEW

+140

xTaskPriorityInherit

NEW

+72

vQueueUnregisterQueue

NEW

+60

pw::sync::Mutex::lock()

NEW

+60

pw::sync::Mutex::unlock()

NEW

+52

pw::allocator::SynchronizedAllocator<>

NEW

+50

pw::allocator::SynchronizedAllocator<>::DoAllocate()

NEW

+48

pw::allocator::SynchronizedAllocator<>::DoDeallocate()

NEW

+44

pw::allocator::SynchronizedAllocator<>::DoReallocate()

NEW

+42

pw::allocator::SynchronizedAllocator<>::DoGetInfo()

NEW

+42

pw::allocator::SynchronizedAllocator<>::~SynchronizedAllocator()

NEW

+40

pw::allocator::SynchronizedAllocator<>::DoResize()

NEW

+40

pw::allocator::SynchronizedAllocator<>::SynchronizedAllocator()

NEW

+40

vQueueDelete

NEW

+34

pw::allocator::SynchronizedAllocator<>::DoGetAllocated()

NEW

+24

prvIsQueueEmpty

NEW

+24

pvTaskIncrementMutexHeldCount

NEW

+12

pw::allocator::size_report::MeasureAllocator()

+1,472

RAM

DEL

-68

pw::allocator::size_report::Measure()::allocator

NEW

+95

pw::allocator::size_report::Measure()::alloc

NEW

+80

xQueueRegistry

NEW

+65

pw::allocator::size_report::Measure()::base

+172

TrackingAllocator<AllMetrics>

FLASH

+24

[section .rodata]

+2

pw::allocator::AllocatableBlock<>::DoResize()

+24

pw::allocator::size_report::Measure()

+40

pw::Result<>::operator*()

+2

pw::metric::Group::Group()

-2

pw::containers::internal::IntrusiveForwardListItem::DoGetPrevious()

+4

__bi_84

DEL

-12

pw::allocator::size_report::MeasureBlockAllocator()

+2

_ZNSt3__213__atomic_baseIjLb0EE21compare_exchange_weakB8nn210000ERjjNS_12memory_orderE

NEW

+276

pw::allocator::TrackingAllocator<>::DoReallocate()

NEW

+252

pw::allocator::internal::AllMetrics::AllMetrics()

NEW

+156

pw::allocator::internal::Metrics<>::Metrics()

NEW

+116

pw::allocator::TrackingAllocator<>::DoResize()

NEW

+108

pw::allocator::TrackingAllocator<>::DoDeallocate()

NEW

+100

pw::allocator::internal::AllMetrics::~AllMetrics()

NEW

+98

pw::allocator::TrackingAllocator<>::DoAllocate()

NEW

+84

pw::metric::Metric::Decrement()

NEW

+78

pw::allocator::internal::Metrics<>::ModifyAllocated()

NEW

+76

pw::allocator::internal::Metrics<>::ModifyRequested()

NEW

+52

pw::allocator::TrackingAllocator<>

NEW

+48

pw::metric::Metric::SetInt()

NEW

+48

pw::metric::Metric::as_int()

NEW

+42

pw::allocator::TrackingAllocator<>::~TrackingAllocator()

NEW

+36

pw::allocator::TrackingAllocator<>::TrackingAllocator()

NEW

+36

pw::containers::internal::LegacyIntrusiveList<>::Item::~Item()

NEW

+32

__atomic_store_4

NEW

+32

pw::allocator::Layout::Unwrap()

NEW

+32

pw::containers::internal::LegacyIntrusiveList<>::~LegacyIntrusiveList()

NEW

+26

pw::allocator::internal::Metrics<>::RecordFailure()

NEW

+26

pw::metric::Group::~Group()

NEW

+24

pw::containers::internal::IntrusiveListItemBase<>::unlist()

NEW

+20

pw::allocator::internal::Metrics<>::~Metrics()

NEW

+14

pw::allocator::internal::Metrics<>::IncrementReallocations()

NEW

+12

pw::allocator::TrackingAllocator<>::DoGetAllocated()

NEW

+12

pw::allocator::TrackingAllocator<>::DoGetInfo()

NEW

+12

pw::allocator::internal::Metrics<>::IncrementAllocations()

NEW

+12

pw::allocator::internal::Metrics<>::IncrementDeallocations()

NEW

+12

pw::allocator::internal::Metrics<>::IncrementResizes()

NEW

+12

pw::allocator::size_report::MeasureAllocator()

+1,968

RAM

DEL

-68

pw::allocator::size_report::Measure()::allocator

NEW

+211

pw::allocator::size_report::Measure()::alloc

NEW

+65

pw::allocator::size_report::Measure()::base

+208

TrackingAllocator<NoMetrics>

FLASH

+2

pw::allocator::AllocatableBlock<>::DoResize()

+52

pw::allocator::size_report::Measure()

-2

pw::containers::internal::IntrusiveForwardListItem::DoGetPrevious()

+4

__bi_84

DEL

-12

pw::allocator::size_report::MeasureBlockAllocator()

+4

vClearInterruptMaskFromISR

NEW

+52

pw::allocator::TrackingAllocator<>

NEW

+42

pw::allocator::TrackingAllocator<>::~TrackingAllocator()

NEW

+32

pw::containers::internal::LegacyIntrusiveList<>::~LegacyIntrusiveList()

NEW

+26

pw::allocator::TrackingAllocator<>::DoDeallocate()

NEW

+26

pw::metric::Group::~Group()

NEW

+24

pw::containers::internal::IntrusiveListItemBase<>::unlist()

NEW

+20

pw::allocator::TrackingAllocator<>::DoAllocate()

NEW

+18

pw::containers::internal::LegacyIntrusiveList<>::Item::~Item()

NEW

+12

pw::allocator::TrackingAllocator<>::DoGetAllocated()

NEW

+12

pw::allocator::TrackingAllocator<>::DoGetInfo()

NEW

+12

pw::allocator::size_report::MeasureAllocator()

NEW

+10

pw::allocator::TrackingAllocator<>::DoReallocate()

NEW

+10

pw::allocator::TrackingAllocator<>::DoResize()

+344

RAM

DEL

-68

pw::allocator::size_report::Measure()::allocator

NEW

+65

pw::allocator::size_report::Measure()::base

NEW

+35

pw::allocator::size_report::Measure()::alloc

+32