Code size analysis#

pw_allocator: Flexible, safe, and measurable memory allocation

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

Label

Segment

Delta

NullAllocator

FLASH

+8

[section .rodata]

-4

vPortSVCHandler_C

-4

__bi_84

+4

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

NEW

+114

pw::Allocator::DoReallocate()

NEW

+44

pw::allocator::NullAllocator

NEW

+40

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

NEW

+24

pw::Allocator::Resize()

NEW

+12

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

NEW

+10

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

NEW

+8

pw::allocator::AbstractAllocator::DoMeasureFragmentation()

NEW

+8

pw::allocator::GetNullAllocator()

NEW

+6

pw::allocator::AbstractAllocator::DoGetAllocated()

NEW

+6

pw::allocator::AbstractAllocator::DoGetInfo()

NEW

+4

pw::allocator::AbstractAllocator::DoResize()

NEW

+4

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

NEW

+2

pw::Deallocator::~Deallocator()

NEW

+2

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

+288

RAM

+8

[section .data]

NEW

+8

pw::allocator::GetNullAllocator()::kInstance

+16

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

vPortSVCHandler_C

NEW

+178

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

NEW

+174

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

NEW

+164

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

+62

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

NEW

+62

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

NEW

+58

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

NEW

+50

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

NEW

+48

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

NEW

+48

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

NEW

+42

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

NEW

+40

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

NEW

+38

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

NEW

+38

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

NEW

+32

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

NEW

+32

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

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,864

SmallBlock

FLASH

+8

[section .rodata]

-4

vPortSVCHandler_C

NEW

+180

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

NEW

+162

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

NEW

+154

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

NEW

+94

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

NEW

+88

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

NEW

+88

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

NEW

+56

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

NEW

+50

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

NEW

+48

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

NEW

+40

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

NEW

+40

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

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::BasicBlock<>::FromUsableSpace<>()

NEW

+16

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

NEW

+10

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

+1,192

SmallAlignableBlock

FLASH

+8

[section .rodata]

NEW

+174

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

NEW

+162

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

NEW

+154

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

NEW

+134

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

NEW

+100

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

NEW

+90

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

NEW

+88

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::AllocatableBlock<>::DoCanAlloc()

NEW

+50

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

NEW

+42

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

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,448

TinyBlock

FLASH

+8

[section .rodata]

+4

vPortSVCHandler_C

+2

main

NEW

+180

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

NEW

+178

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

NEW

+168

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

NEW

+108

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

NEW

+90

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

NEW

+76

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

NEW

+68

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

NEW

+56

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

NEW

+50

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

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

+16

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

+1,192

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++()

+8

vPortSVCHandler_C

+36

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

+22

pw::IntrusiveMultiMap<>::erase()

+2

pw::allocator::LibCAllocator::DoReallocate()

NEW

+182

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

NEW

+106

std::__2::__find_if[abi:nqn240000]<>()

NEW

+92

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

NEW

+92

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

NEW

+60

std::__2::find_if[abi:nqn240000]<>()

NEW

+50

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

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::IntrusiveMultiMap<>::lower_bound()

NEW

+22

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

NEW

+20

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

NEW

+20

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

NEW

+18

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

+976

RAM

NEW

+40

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

+40

SmallBlock with basic assertions enabled

FLASH

+8

[section .rodata]

-4

vPortSVCHandler_C

NEW

+180

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

NEW

+162

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

NEW

+154

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

NEW

+94

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

NEW

+88

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

NEW

+88

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

NEW

+56

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

NEW

+50

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

NEW

+48

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

NEW

+40

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

NEW

+40

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

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::BasicBlock<>::FromUsableSpace<>()

NEW

+16

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

NEW

+10

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

+1,192

DetailedBlock with robust assertions enabled

FLASH

+132

[section .rodata]

-4

__bi_84

NEW

+162

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

NEW

+144

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

NEW

+138

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

NEW

+86

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

NEW

+84

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

NEW

+78

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::ContiguousBlock<>::DoMergeNext()

NEW

+48

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

NEW

+42

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

NEW

+42

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

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

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

NEW

+24

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

NEW

+22

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

NEW

+16

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

NEW

+16

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

NEW

+16

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

NEW

+14

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

NEW

+10

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

+1,504

DetailedBlock with debug assertions enabled

FLASH

+280

[section .rodata]

+2

pw::GetAlignedSubspan()

-4

vPortSVCHandler_C

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

+50

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

NEW

+46

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

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::ContiguousBlock<>::PrevUnchecked()

NEW

+28

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

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+22

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

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::BasicBlock<>::UsableSpaceUncheckedImpl<>()

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

+10

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,328

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++()

+8

vPortSVCHandler_C

+36

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

+22

pw::IntrusiveMultiMap<>::erase()

+2

pw::allocator::LibCAllocator::DoReallocate()

NEW

+182

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

NEW

+106

std::__2::__find_if[abi:nqn240000]<>()

NEW

+92

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

NEW

+92

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

NEW

+60

std::__2::find_if[abi:nqn240000]<>()

NEW

+50

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

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::IntrusiveMultiMap<>::lower_bound()

NEW

+22

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

NEW

+20

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

NEW

+20

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

NEW

+18

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

+976

RAM

NEW

+40

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

+40

SequencedBucket, which uses IntrusiveList

FLASH

+12

vPortSVCHandler_C

+2

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

+16

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

-2

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

NEW

+186

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

NEW

+90

std::__2::find_if[abi:nqn240000]<>()

NEW

+72

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

NEW

+70

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

NEW

+70

std::__2::__find_if[abi:nqn240000]<>()

NEW

+58

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

NEW

+28

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

NEW

+26

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

NEW

+22

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

NEW

+22

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

+672

RAM

NEW

+16

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

+16

SortedBucket, which uses IntrusiveForwardList

FLASH

+4

vPortSVCHandler_C

+16

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

NEW

+192

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

+12

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

+432

RAM

+8

[section .data]

NEW

+8

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

+16

UnorderedBucket, which uses IntrusiveForwardList

FLASH

+12

vPortSVCHandler_C

+16

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

NEW

+192

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

+24

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

NEW

+22

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

NEW

+18

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

NEW

+12

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

+400

RAM

+8

[section .data]

NEW

+8

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

+16

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

+512

[section .rodata]

-24

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

DEL

-174

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

DEL

-164

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()

-4

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

DEL

-76

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

+2

pw::GetAlignedSubspan()

-14

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

DEL

-62

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

DEL

-62

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

-4

vPortSVCHandler_C

-18

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

-2

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

DEL

-48

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

DEL

-48

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

+8

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

DEL

-38

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

DEL

-32

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

DEL

-32

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

DEL

-28

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

DEL

-16

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

DEL

-16

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

+40

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

NEW

+190

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

NEW

+184

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

NEW

+144

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

NEW

+138

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

NEW

+136

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

NEW

+128

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

NEW

+126

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

NEW

+126

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

NEW

+114

pw::Allocator::DoReallocate()

NEW

+112

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

NEW

+108

std::__2::__find_if[abi:nqn240000]<>()

NEW

+98

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

NEW

+94

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

NEW

+92

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

NEW

+92

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

NEW

+90

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

NEW

+84

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

NEW

+84

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

NEW

+76

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

NEW

+76

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

NEW

+72

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

NEW

+68

pw::allocator::BestFitAllocator<>

NEW

+68

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

NEW

+68

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

NEW

+68

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

NEW

+62

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

NEW

+60

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

NEW

+60

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

NEW

+60

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

NEW

+60

std::__2::find_if[abi:nqn240000]<>()

NEW

+56

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

NEW

+56

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

NEW

+52

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

NEW

+50

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

NEW

+50

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

NEW

+46

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

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

NEW

+42

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

NEW

+42

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

NEW

+42

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

NEW

+40

pw::IntrusiveMultiMap<>::end()

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+38

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

NEW

+38

pw::allocator::(anonymous namespace)::Square()

NEW

+38

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

NEW

+38

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

NEW

+38

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

NEW

+36

pw::allocator::Fragmentation::AddFragment()

NEW

+36

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

NEW

+34

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

NEW

+34

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

NEW

+32

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

NEW

+32

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

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+26

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

NEW

+26

pw::allocator::ForwardSortedBucket<>::DoFindLargest()

NEW

+24

__aeabi_uread4

NEW

+24

pw::Allocator::Resize()

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+22

fit::internal::inline_trivial_target_move<>()

NEW

+22

pw::IntrusiveMultiMap<>::erase()

NEW

+22

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+22

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

NEW

+22

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

NEW

+22

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

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

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

NEW

+20

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

NEW

+20

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

NEW

+18

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

NEW

+16

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

NEW

+16

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

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

+4

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

NEW

+2

fit::internal::inline_target_get()

NEW

+2

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

+4,360

RAM

NEW

+76

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

+76

BucketAllocator

FLASH

+232

[section .rodata]

-24

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

DEL

-174

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

DEL

-164

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()

-4

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

DEL

-76

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

+2

pw::GetAlignedSubspan()

-14

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

DEL

-62

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

DEL

-62

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

-12

vPortSVCHandler_C

-18

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

-2

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

DEL

-48

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

DEL

-48

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

+8

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

DEL

-38

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

DEL

-32

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

DEL

-32

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

DEL

-28

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

-4

__bi_84

DEL

-16

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

DEL

-16

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

+40

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

NEW

+136

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

NEW

+128

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

NEW

+126

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

NEW

+124

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

NEW

+116

pw::Allocator::DoReallocate()

NEW

+112

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

NEW

+94

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

NEW

+84

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

NEW

+74

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

NEW

+68

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

NEW

+68

pw::allocator::BucketAllocator<>

NEW

+58

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

NEW

+44

pw::allocator::BasicBucketAllocator<>::DoGetMaxAllocatable()

NEW

+44

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

NEW

+44

std::__2::__max_element[abi:nqn240000]<>()

NEW

+42

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

NEW

+42

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+38

pw::allocator::(anonymous namespace)::Square()

NEW

+36

pw::allocator::BasicBucketAllocator<>::InitBuckets()

NEW

+36

pw::allocator::Fragmentation::AddFragment()

NEW

+34

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

NEW

+30

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

NEW

+28

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

NEW

+26

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

NEW

+26

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

NEW

+24

pw::Allocator::Resize()

NEW

+24

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

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::allocator::internal::BucketBase<>::FindLargest()

NEW

+20

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

NEW

+18

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

NEW

+16

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

NEW

+14

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

NEW

+12

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

NEW

+12

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

NEW

+12

std::__2::max_element[abi:nqn240000]<>()

NEW

+10

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

NEW

+4

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

NEW

+2

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

+1,240

RAM

NEW

+80

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

+80

DlAllocator

FLASH

+512

[section .rodata]

-24

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

DEL

-174

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

DEL

-164

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()

-4

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

DEL

-76

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

+2

pw::GetAlignedSubspan()

-16

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

DEL

-62

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

DEL

-62

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

-4

vPortSVCHandler_C

-18

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

-2

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

DEL

-48

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

DEL

-48

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

+8

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

DEL

-38

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

DEL

-32

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

DEL

-32

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

DEL

-28

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

DEL

-16

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

DEL

-16

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

+44

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

NEW

+252

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

NEW

+200

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

NEW

+188

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

NEW

+184

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

NEW

+144

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

NEW

+138

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

NEW

+136

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

NEW

+132

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

NEW

+128

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

NEW

+126

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

NEW

+124

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

NEW

+120

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

NEW

+114

pw::Allocator::DoReallocate()

NEW

+112

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

NEW

+108

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

NEW

+108

std::__2::__find_if[abi:nqn240000]<>()

NEW

+98

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

NEW

+98

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

NEW

+94

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

NEW

+92

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

NEW

+92

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

NEW

+90

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

NEW

+88

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

NEW

+84

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

NEW

+84

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

NEW

+84

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

NEW

+80

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

NEW

+78

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

NEW

+72

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

NEW

+72

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

NEW

+68

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

NEW

+68

pw::allocator::DlAllocator<>

NEW

+68

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

NEW

+60

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

NEW

+60

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

NEW

+60

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

NEW

+60

std::__2::find_if[abi:nqn240000]<>()

NEW

+56

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

NEW

+56

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

NEW

+52

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

NEW

+50

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

NEW

+48

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

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::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+44

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

NEW

+44

std::__2::__max_element[abi:nqn240000]<>()

NEW

+42

pw::IntrusiveMultiMap<>::end()

NEW

+42

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

NEW

+42

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

NEW

+42

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

NEW

+42

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+38

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

NEW

+38

pw::allocator::(anonymous namespace)::Square()

NEW

+38

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

NEW

+38

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

NEW

+36

pw::allocator::Fragmentation::AddFragment()

NEW

+36

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

NEW

+34

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

NEW

+34

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

NEW

+34

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

NEW

+32

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

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

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

NEW

+30

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

NEW

+28

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

NEW

+28

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

NEW

+24

__aeabi_uread4

NEW

+24

pw::Allocator::Resize()

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+22

fit::internal::inline_trivial_target_move<>()

NEW

+22

pw::IntrusiveMultiMap<>::erase()

NEW

+22

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+22

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

NEW

+22

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

NEW

+22

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

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

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

NEW

+20

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

NEW

+20

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

NEW

+18

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

NEW

+18

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

NEW

+16

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

NEW

+16

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

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

+14

std::__2::__fill_n[abi:nqn240000]<>()

NEW

+12

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

NEW

+12

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

NEW

+12

std::__2::array<>::fill[abi:nqn240000]()

NEW

+12

std::__2::max_element[abi:nqn240000]<>()

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

+4

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

NEW

+2

fit::internal::inline_target_get()

+5,512

RAM

-1

claimed

NEW

+2,905

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

+2,904

FirstFitAllocator

FLASH

+232

[section .rodata]

-24

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

DEL

-174

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

-2

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()

-4

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

DEL

-76

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

+2

pw::GetAlignedSubspan()

-16

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

DEL

-62

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

DEL

-62

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

-4

vPortSVCHandler_C

-18

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

-2

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

DEL

-48

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

DEL

-48

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

+8

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

DEL

-32

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

DEL

-32

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

DEL

-28

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

+36

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

-4

__bi_84

+2

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

DEL

-16

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

+44

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

NEW

+136

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

NEW

+128

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

NEW

+126

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

NEW

+124

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

NEW

+116

pw::Allocator::DoReallocate()

NEW

+112

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

NEW

+94

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

NEW

+90

std::__2::find_if[abi:nqn240000]<>()

NEW

+72

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

NEW

+72

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

NEW

+70

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

NEW

+68

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

NEW

+68

pw::allocator::FirstFitAllocator<>

NEW

+68

std::__2::__find_if[abi:nqn240000]<>()

NEW

+64

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

NEW

+58

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

NEW

+44

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

NEW

+44

std::__2::__max_element[abi:nqn240000]<>()

NEW

+42

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

NEW

+42

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

NEW

+42

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

NEW

+40

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

NEW

+40

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

NEW

+38

pw::allocator::(anonymous namespace)::Square()

NEW

+36

pw::allocator::Fragmentation::AddFragment()

NEW

+30

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

NEW

+28

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

NEW

+26

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

NEW

+26

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

NEW

+24

pw::Allocator::Resize()

NEW

+24

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

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

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

NEW

+20

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

NEW

+20

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

NEW

+14

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

NEW

+12

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

NEW

+12

std::__2::max_element[abi:nqn240000]<>()

NEW

+10

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

NEW

+10

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

NEW

+10

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

NEW

+4

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

NEW

+2

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

+1,560

RAM

NEW

+48

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

+48

TlsfAllocator

FLASH

+512

[section .rodata]

-24

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

DEL

-174

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

DEL

-164

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()

-4

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

DEL

-76

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

+2

pw::GetAlignedSubspan()

-16

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

DEL

-62

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

DEL

-62

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

-8

vPortSVCHandler_C

-18

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

-2

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

DEL

-48

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

DEL

-48

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

+8

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

DEL

-38

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

DEL

-32

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

DEL

-32

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

DEL

-28

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

DEL

-16

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

DEL

-16

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

+44

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

NEW

+188

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

NEW

+184

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

NEW

+176

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

NEW

+176

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

NEW

+168

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

NEW

+156

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

NEW

+144

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

NEW

+138

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

NEW

+136

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

NEW

+128

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

NEW

+128

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

NEW

+126

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

NEW

+114

pw::Allocator::DoReallocate()

NEW

+112

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

NEW

+108

std::__2::__find_if[abi:nqn240000]<>()

NEW

+98

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

NEW

+94

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

NEW

+92

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

NEW

+92

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

NEW

+90

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

NEW

+88

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

NEW

+84

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

NEW

+84

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

NEW

+80

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

NEW

+76

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

NEW

+76

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

NEW

+72

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

NEW

+68

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

NEW

+68

pw::allocator::TlsfAllocator<>

NEW

+68

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

NEW

+62

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

NEW

+60

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

NEW

+60

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

NEW

+60

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

NEW

+60

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

NEW

+60

std::__2::find_if[abi:nqn240000]<>()

NEW

+56

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

NEW

+56

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

NEW

+56

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

NEW

+54

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

NEW

+52

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

NEW

+50

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

NEW

+50

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

NEW

+46

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

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

NEW

+42

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

NEW

+42

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

NEW

+42

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

NEW

+40

pw::IntrusiveMultiMap<>::end()

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+38

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

NEW

+38

pw::allocator::(anonymous namespace)::Square()

NEW

+38

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

NEW

+38

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

NEW

+38

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

NEW

+36

pw::allocator::Fragmentation::AddFragment()

NEW

+36

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

NEW

+34

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

NEW

+34

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

NEW

+32

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

NEW

+32

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

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

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

NEW

+28

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

NEW

+28

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

NEW

+26

pw::allocator::ForwardSortedBucket<>::DoFindLargest()

NEW

+24

__aeabi_uread4

NEW

+24

pw::Allocator::Resize()

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+22

fit::internal::inline_trivial_target_move<>()

NEW

+22

pw::IntrusiveMultiMap<>::erase()

NEW

+22

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+22

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

NEW

+22

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

NEW

+22

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

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

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

NEW

+20

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

NEW

+20

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

NEW

+18

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

NEW

+16

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

NEW

+16

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

NEW

+16

std::__2::__fill_n[abi:nqn240000]<>()

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

+14

std::__2::array<>::fill[abi:nqn240000]()

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

+4

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

NEW

+2

fit::internal::inline_target_get()

NEW

+2

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

+5,240

RAM

-1

claimed

NEW

+5,821

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

+5,820

WorstFitAllocator

FLASH

+500

[section .rodata]

-24

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

DEL

-174

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

DEL

-164

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()

-4

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

DEL

-76

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

+2

pw::GetAlignedSubspan()

-14

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

DEL

-62

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

DEL

-62

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

-12

vPortSVCHandler_C

-18

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

-2

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

DEL

-48

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

DEL

-48

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

+8

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

DEL

-38

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

DEL

-32

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

DEL

-32

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

DEL

-28

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

-4

__bi_84

DEL

-16

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

DEL

-16

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

+40

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

NEW

+190

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

NEW

+184

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

NEW

+144

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

NEW

+138

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

NEW

+136

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

NEW

+128

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

NEW

+126

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

NEW

+126

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

NEW

+114

pw::Allocator::DoReallocate()

NEW

+112

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

NEW

+106

std::__2::__find_if[abi:nqn240000]<>()

NEW

+98

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

NEW

+94

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

NEW

+92

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

NEW

+92

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

NEW

+90

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

NEW

+84

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

NEW

+84

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

NEW

+72

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

NEW

+68

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

NEW

+68

pw::allocator::WorstFitAllocator<>

NEW

+68

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

NEW

+68

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

NEW

+62

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

NEW

+62

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

NEW

+60

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

NEW

+60

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

NEW

+60

std::__2::find_if[abi:nqn240000]<>()

NEW

+56

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

NEW

+56

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

NEW

+56

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

NEW

+52

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

NEW

+52

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

NEW

+50

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

NEW

+50

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

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

+42

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

NEW

+42

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

NEW

+42

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

NEW

+42

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

NEW

+42

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

NEW

+40

pw::IntrusiveMultiMap<>::begin()

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+38

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

NEW

+38

pw::allocator::(anonymous namespace)::Square()

NEW

+38

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

NEW

+36

pw::allocator::Fragmentation::AddFragment()

NEW

+36

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

NEW

+36

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

NEW

+34

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

NEW

+34

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

NEW

+32

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

NEW

+32

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

NEW

+30

pw::IntrusiveMultiMap<>::equal_range()

NEW

+30

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+26

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

NEW

+26

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

NEW

+24

__aeabi_uread4

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

fit::internal::inline_trivial_target_move<>()

NEW

+22

pw::IntrusiveMultiMap<>::erase()

NEW

+22

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

NEW

+22

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

NEW

+22

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

NEW

+20

pw::IntrusiveMultiMap<>::end()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

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

NEW

+20

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

NEW

+20

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

NEW

+18

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

NEW

+18

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

NEW

+16

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

NEW

+16

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

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

+4

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

NEW

+4

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

NEW

+2

fit::internal::inline_target_get()

+4,296

RAM

NEW

+84

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

+84

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

+548

[section .rodata]

+4

vPortSVCHandler_C

+40

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

NEW

+196

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

NEW

+160

pw::allocator::internal::GenericBuddyAllocator::DoDeallocate()

NEW

+158

pw::allocator::internal::GenericBuddyAllocator::DoAllocate()

NEW

+114

pw::Allocator::DoReallocate()

NEW

+114

pw::allocator::internal::GenericBuddyAllocator::DoGetInfo()

NEW

+108

pw::allocator::internal::GenericBuddyAllocator::CrashIfAllocated()

NEW

+80

pw::allocator::BuddyAllocator<>::BuddyAllocator()

NEW

+64

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

NEW

+46

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

NEW

+44

pw::allocator::BuddyAllocator<>

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+38

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

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

+34

pw::allocator::internal::GenericBuddyAllocator::InitBuckets()

NEW

+32

pw::allocator::internal::BuddyBlock::Split()

NEW

+30

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

NEW

+26

pw::allocator::Layout::Extend()

NEW

+26

pw::allocator::internal::BuddyBlock::Merge()

NEW

+26

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

NEW

+24

pw::Allocator::Resize()

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

pw::Allocator::Allocate()

NEW

+18

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

NEW

+18

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

NEW

+16

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

NEW

+16

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

NEW

+16

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

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::allocator::size_report::MeasureAllocator()

NEW

+10

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

NEW

+8

pw::allocator::AbstractAllocator::DoMeasureFragmentation()

NEW

+6

pw::allocator::AbstractAllocator::DoGetAllocated()

NEW

+4

pw::allocator::AbstractAllocator::DoResize()

+2,576

RAM

NEW

+72

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

+72

BumpAllocator

FLASH

+8

[section .rodata]

+4

vPortSVCHandler_C

-4

__bi_84

+40

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

NEW

+116

pw::Allocator::DoReallocate()

NEW

+50

pw::allocator::BumpAllocator::DoAllocate()

NEW

+44

pw::allocator::BumpAllocator

NEW

+40

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

NEW

+40

pw::allocator::BumpAllocator::BumpAllocator()

NEW

+38

pw::allocator::BumpAllocator::~BumpAllocator()

NEW

+24

pw::Allocator::Resize()

NEW

+24

pw::allocator::BumpAllocator::Reset()

NEW

+18

pw::allocator::BumpAllocator::Init()

NEW

+16

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

NEW

+12

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

NEW

+8

pw::allocator::AbstractAllocator::DoMeasureFragmentation()

NEW

+6

pw::allocator::AbstractAllocator::DoGetInfo()

NEW

+4

pw::allocator::AbstractAllocator::DoResize()

NEW

+4

pw::allocator::BumpAllocator::DoDeallocate()

NEW

+4

pw::allocator::BumpAllocator::DoGetAllocated()

+496

RAM

NEW

+28

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

+28

LibCAllocator

FLASH

+4

vPortSVCHandler_C

-4

__bi_84

+4

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

NEW

+550

__llvm_libc_24_0_0_git::FreeListHeap::shrink_in_place()

NEW

+544

__llvm_libc_24_0_0_git::FreeListHeap::allocate_impl()

NEW

+400

__llvm_libc_24_0_0_git::FreeStore::remove_best_fit()

NEW

+378

__llvm_libc_24_0_0_git::BlockRef::allocate()

NEW

+314

__llvm_libc_24_0_0_git::FreeListHeap::init()

NEW

+232

__llvm_libc_24_0_0_git::inline_memcpy()

NEW

+154

__llvm_libc_24_0_0_git::FreeListHeap::realloc()

NEW

+44

pw::allocator::LibCAllocator

NEW

+24

malloc

NEW

+24

realloc

NEW

+20

pw::allocator::LibCAllocator::DoReallocate()

NEW

+18

pw::allocator::LibCAllocator::DoAllocate()

NEW

+12

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

NEW

+10

pw::allocator::LibCAllocator::DoDeallocate()

NEW

+10

pw::allocator::LibCAllocator::~LibCAllocator()

NEW

+8

pw::allocator::AbstractAllocator::DoMeasureFragmentation()

NEW

+8

pw::allocator::GetLibCAllocator()

NEW

+6

pw::allocator::AbstractAllocator::DoGetAllocated()

NEW

+6

pw::allocator::AbstractAllocator::DoGetInfo()

NEW

+4

pw::allocator::AbstractAllocator::DoResize()

NEW

+2

pw::Deallocator::~Deallocator()

+2,772

RAM

+8

[section .data]

NEW

+8

pw::allocator::GetLibCAllocator()::kInstance

+16

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

+92

[section .rodata]

-2

pw::GetAlignedSubspan()

+56

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

+4

vPortSVCHandler_C

+2

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

DEL

-12

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

NEW

+224

pw::allocator::FallbackAllocator::DoGetInfo()

NEW

+112

pw::allocator::FallbackAllocator::DoMeasureFragmentation()

NEW

+80

pw::allocator::Fragmentation::operator+=()

NEW

+68

pw::allocator::FallbackAllocator::FallbackAllocator()

NEW

+44

pw::allocator::FallbackAllocator

NEW

+42

pw::allocator::FallbackAllocator::DoDeallocate()

NEW

+36

pw::allocator::FallbackAllocator::DoResize()

NEW

+32

pw::allocator::FallbackAllocator::DoAllocate()

NEW

+26

pw::Deallocator::Recognizes()

NEW

+26

pw::allocator::FallbackAllocator::DoGetAllocated()

NEW

+18

pw::Allocator::Allocate()

NEW

+12

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

NEW

+10

pw::allocator::FallbackAllocator::~FallbackAllocator()

NEW

+2

pw::Deallocator::~Deallocator()

+872

RAM

DEL

-76

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

NEW

+73

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

NEW

+73

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

NEW

+18

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

+88

GuardedAllocator

FLASH

+296

[section .rodata]

+2

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

+44

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

-8

vPortSVCHandler_C

-4

__bi_84

DEL

-12

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

NEW

+116

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

NEW

+102

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

NEW

+98

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

NEW

+72

pw::allocator::internal::(anonymous namespace)::AdjustSizeImpl()

NEW

+48

pw::allocator::internal::(anonymous namespace)::AsWords()

NEW

+48

pw::allocator::internal::GenericGuardedAllocator::AddPrefix()

NEW

+46

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

NEW

+44

pw::allocator::GuardedAllocator<>

NEW

+36

pw::sync::BorrowedPointer<>::operator*()

NEW

+36

pw::sync::BorrowedPointer<>::operator->()

NEW

+30

pw::allocator::internal::GenericGuardedAllocator::AdjustLayout()

NEW

+28

pw::allocator::internal::(anonymous namespace)::GetSuffix()

NEW

+28

pw::allocator::internal::GenericGuardedAllocator::GetOriginal()

NEW

+24

pw::allocator::internal::GenericGuardedAllocator::AddSuffix()

NEW

+20

pw::allocator::internal::GenericGuardedAllocator::AdjustSize()

NEW

+18

pw::Allocator::Allocate()

NEW

+12

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

NEW

+10

pw::Allocator::DoMeasureFragmentation()

NEW

+10

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

NEW

+6

pw::Allocator::DoGetAllocated()

NEW

+2

pw::Deallocator::~Deallocator()

+1,152

RAM

DEL

-76

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

NEW

+73

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

NEW

+27

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

+24

AsPmrAllocator

FLASH

+128

[section .rodata]

DEL

-544

__llvm_libc_24_0_0_git::FreeListHeap::allocate_impl()

DEL

-400

__llvm_libc_24_0_0_git::FreeStore::remove_best_fit()

DEL

-378

__llvm_libc_24_0_0_git::BlockRef::allocate()

DEL

-314

__llvm_libc_24_0_0_git::FreeListHeap::init()

-2

pw::Allocator::DoReallocate()

+52

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

+10

std::__2::vector<>::__emplace_back_slow_path[abi:nqn240000]<>()

+26

std::__2::__split_buffer_size_layout<>::__relocate[abi:nqn240000]()

+4

vPortSVCHandler_C

+2

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

+6

std::__2::__split_buffer<>::__split_buffer[abi:nqn240000]()

-26

std::__2::vector<>::emplace_back[abi:nqn240000]<>()::{lambda()#1}::operator()[abi:nqn240000]()

DEL

-32

pw::Allocator::New<>()

+6

std::__2::__split_buffer<>::~__split_buffer[abi:nqn240000]()

DEL

-28

std::__2::allocator<>::allocate[abi:nqn240000]()

+6

std::__2::vector<>::__destroy_vector::operator()[abi:nqn240000]()

DEL

-24

malloc

-4

__bi_84

DEL

-8

operator new()

NEW

+64

pw::allocator::internal::MemoryResource::do_allocate()

NEW

+44

std::__2::vector<>::__emplace_back_assume_capacity[abi:nqn240000]<>()

NEW

+36

std::__2::pmr::polymorphic_allocator<>::allocate[abi:nqn240000]()

NEW

+28

pw::allocator::internal::MemoryResource

NEW

+16

pw::allocator::internal::MemoryResource::do_deallocate()

NEW

+14

pw::allocator::internal::MemoryResource::~MemoryResource()

NEW

+8

pw::allocator::internal::MemoryResource::do_is_equal()

NEW

+2

std::__2::pmr::memory_resource::~memory_resource()

-1,308

RAM

-3

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

NEW

+15

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

+12

SynchronizedAllocator<sync::InterruptSpinLock>

FLASH

-2

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

+2

pw::Allocator::DoReallocate()

+24

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

+4

vPortSVCHandler_C

-4

__bi_84

DEL

-12

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

NEW

+44

pw::allocator::SynchronizedAllocator<>

NEW

+44

pw::allocator::SynchronizedAllocator<>::DoReallocate()

NEW

+42

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

NEW

+40

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

NEW

+40

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

NEW

+38

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

NEW

+36

pw::allocator::SynchronizedAllocator<>::DoMeasureFragmentation()

NEW

+36

pw::allocator::SynchronizedAllocator<>::SynchronizedAllocator()

NEW

+34

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

NEW

+32

pw::Allocator::Reallocate()

NEW

+18

pw::Allocator::Allocate()

NEW

+12

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

NEW

+10

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

NEW

+2

pw::Deallocator::~Deallocator()

+440

RAM

DEL

-76

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

NEW

+73

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

NEW

+31

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

+28

SynchronizedAllocator<sync::Mutex>

FLASH

+96

[section .rodata]

+2

pw::Allocator::DoReallocate()

+24

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

-8

vPortSVCHandler_C

-4

__bi_84

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

+44

pw::allocator::SynchronizedAllocator<>

NEW

+44

pw::allocator::SynchronizedAllocator<>::DoReallocate()

NEW

+44

pw::allocator::SynchronizedAllocator<>::SynchronizedAllocator()

NEW

+42

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

NEW

+42

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

NEW

+40

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

NEW

+40

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

NEW

+40

vQueueDelete

NEW

+38

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

NEW

+36

pw::allocator::SynchronizedAllocator<>::DoMeasureFragmentation()

NEW

+34

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

NEW

+32

pw::Allocator::Reallocate()

NEW

+24

prvIsQueueEmpty

NEW

+20

pvTaskIncrementMutexHeldCount

NEW

+18

pw::Allocator::Allocate()

NEW

+12

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

+1,520

RAM

DEL

-76

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

NEW

+95

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

NEW

+80

xQueueRegistry

NEW

+73

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

+172

TrackingAllocator<AllMetrics>

FLASH

+8

[section .rodata]

-2

pw::GetAlignedSubspan()

+24

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

+2

pw::metric::internal::SaturatedIncrement<>()

+40

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

+18

pw::metric::Group::Group()

-2

pw::metric::UntypedMetric::UntypedMetric()

-4

__bi_84

DEL

-12

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

NEW

+252

pw::allocator::internal::AllMetrics::AllMetrics()

NEW

+238

pw::allocator::TrackingAllocator<>::DoReallocate()

NEW

+152

pw::allocator::internal::Metrics<>::Metrics()

NEW

+116

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

NEW

+100

pw::allocator::internal::AllMetrics::~AllMetrics()

NEW

+98

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

NEW

+88

pw::allocator::internal::Metrics<>::ModifyAllocated()

NEW

+88

pw::allocator::internal::Metrics<>::ModifyRequested()

NEW

+86

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

NEW

+48

pw::metric::TypedMetric<>::Decrement()

NEW

+46

pw::metric::internal::SaturatedDecrement<>()

NEW

+44

pw::allocator::TrackingAllocator<>

NEW

+42

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

NEW

+42

pw::metric::Group::~Group()

NEW

+36

pw::allocator::TrackingAllocator<>::TrackingAllocator()

NEW

+32

__atomic_store_4

NEW

+32

pw::Allocator::Reallocate()

NEW

+32

pw::allocator::Layout::Unwrap()

NEW

+32

pw::metric::internal::ListWrapper<>::~ListWrapper()

NEW

+26

pw::allocator::internal::Metrics<>::RecordFailure()

NEW

+26

pw::metric::UntypedMetric::~UntypedMetric()

NEW

+24

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

NEW

+20

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

NEW

+18

pw::Allocator::Allocate()

NEW

+14

pw::allocator::internal::Metrics<>::IncrementReallocations()

NEW

+12

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

NEW

+12

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

NEW

+12

pw::allocator::TrackingAllocator<>::DoMeasureFragmentation()

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,888

RAM

DEL

-76

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

NEW

+211

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

NEW

+73

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

+208

TrackingAllocator<NoMetrics>

FLASH

+2

pw::Allocator::DoReallocate()

+24

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

+18

pw::metric::Group::Group()

-4

__bi_84

DEL

-12

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

NEW

+44

pw::allocator::TrackingAllocator<>

NEW

+42

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

NEW

+42

pw::metric::Group::~Group()

NEW

+36

pw::allocator::TrackingAllocator<>::TrackingAllocator()

NEW

+32

pw::Allocator::Reallocate()

NEW

+32

pw::metric::internal::ListWrapper<>::~ListWrapper()

NEW

+24

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

NEW

+18

pw::Allocator::Allocate()

NEW

+16

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

NEW

+12

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

NEW

+12

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

NEW

+12

pw::allocator::TrackingAllocator<>::DoMeasureFragmentation()

NEW

+12

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

NEW

+10

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

NEW

+10

pw::allocator::TrackingAllocator<>::DoReallocate()

NEW

+10

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

+392

RAM

DEL

-76

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

NEW

+73

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

NEW

+35

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

+32