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

-4

p05.0

+22

main

DEL

-6

__aeabi_memclr

-2

pw_boot_PreMainInit

-2

DefaultFaultHandler

DEL

-2

pw_boot_PreStaticConstructorInit

NEW

+118

pw::Allocator::DoReallocate()

NEW

+102

pw::allocator::SizeReporter::Measure()

NEW

+52

pw::allocator::NullAllocator

NEW

+38

pw::allocator::SizeReporter::SetBaseline()

NEW

+36

pw::Allocator::Reallocate()

NEW

+32

pw::UniquePtr<>::Reset()

NEW

+26

_ZN2pw9Allocator3NewINS_9allocator12SizeReporter3FooETpTnRiJEJEEEPT_DpOT1_

NEW

+16

free

NEW

+14

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt9enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEES9_

NEW

+14

pw::Allocator::Resize()

NEW

+14

pw::Deallocator::DoGetInfo()

NEW

+14

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

NEW

+14

pw::allocator::internal::BaseUniquePtr::HasCapability()

NEW

+10

pw::allocator::internal::BaseUniquePtr::Deallocate()

NEW

+8

operator delete()

NEW

+8

pw::allocator::GetNullAllocator()

NEW

+6

__aeabi_memclr4

NEW

+6

pw::Allocator::DoGetAllocated()

NEW

+6

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

NEW

+6

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

NEW

+4

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

NEW

+2

pw::Deallocator::~Deallocator()

+552

Concrete allocator implementations#

The following are code sizes for each of the provided allocator implementations that directly manage the memory they use to fulfill requests. These are measured relative to the empty implementation measured above.

Label

Segment

Delta

BestFitAllocator

FLASH

DEL

-596

__aeabi_dmul

DEL

-464

__aeabi_ddiv

+30

[section .code]

-4

quorem

DEL

-197

__aeabi_dsub

DEL

-160

__aeabi_d2f

DEL

-140

__gtdf2

DEL

-108

__floatundidf

DEL

-102

pw::allocator::SizeReporter::Measure()

DEL

-80

__aeabi_d2iz

DEL

-68

__extendsfdf2

+1

pw_assert_tokenized_HandleAssertFailure::_pw_tokenizer_string_entry_60_5

DEL

-44

__aeabi_dcmpun

DEL

-38

pw::allocator::SizeReporter::SetBaseline()

DEL

-36

__aeabi_i2d

DEL

-36

pw::Allocator::Reallocate()

DEL

-34

main

DEL

-32

__aeabi_cdrcmple

DEL

-32

__aeabi_ui2d

DEL

-32

pw::UniquePtr<>::Reset()

DEL

-26

_ZN2pw9Allocator3NewINS_9allocator12SizeReporter3FooETpTnRiJEJEEEPT_DpOT1_

DEL

-20

__aeabi_dcmpeq

DEL

-20

__aeabi_dcmpge

DEL

-20

__aeabi_dcmpgt

DEL

-20

__aeabi_dcmple

DEL

-20

__aeabi_dcmplt

DEL

-14

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

+4

p05.0

DEL

-6

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

+2

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

DEL

-4

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

+2

DefaultFaultHandler

DEL

-2

pw::Deallocator::~Deallocator()

NEW

+308

pw::allocator::internal::CrashNextPrevMismatched()::_pw_tokenizer_string_entry_40_3

NEW

+308

pw::allocator::internal::CrashPrevNextMismatched()::_pw_tokenizer_string_entry_59_7

NEW

+253

pw::allocator::internal::CrashPrevMisaligned()::_pw_tokenizer_string_entry_48_5

NEW

+240

std::__find_if<>()

NEW

+201

pw::allocator::internal::CrashPoisonedWhileInUse()::_pw_tokenizer_string_entry_26_1

NEW

+196

pw::allocator::internal::CrashPoisonCorrupted()::_pw_tokenizer_string_entry_31_3

NEW

+191

pw::allocator::internal::CrashNextMisaligned()::_pw_tokenizer_string_entry_29_1

NEW

+186

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

NEW

+184

pw::allocator::internal::CrashMisaligned()::_pw_tokenizer_string_entry_26_1

NEW

+183

pw::containers::internal::CheckIntrusiveItemIsUncontained()::_pw_tokenizer_string_entry_28_3

NEW

+182

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

NEW

+167

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

NEW

+158

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

NEW

+156

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

NEW

+156

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_62_1

NEW

+156

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_63_3

NEW

+143

pw::allocator::internal::GenericBlockAllocator::CrashOnDoubleFree()::_pw_tokenizer_string_entry_37_5

NEW

+142

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

NEW

+142

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

NEW

+140

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

NEW

+140

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

NEW

+134

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

NEW

+128

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

NEW

+120

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

NEW

+110

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

NEW

+106

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_64_7

NEW

+100

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

NEW

+96

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

NEW

+92

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

NEW

+92

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

NEW

+92

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

NEW

+84

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

NEW

+84

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

NEW

+82

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

NEW

+82

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

NEW

+82

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

NEW

+80

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

NEW

+72

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

NEW

+72

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

NEW

+72

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

NEW

+72

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

NEW

+70

pw::GetAlignedSubspan()

NEW

+70

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

NEW

+66

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

NEW

+64

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

NEW

+64

pw::allocator::BestFitAllocator<>

NEW

+64

pw::allocator::BlockAllocator<>

NEW

+64

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

NEW

+64

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

NEW

+62

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

NEW

+56

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

NEW

+56

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

NEW

+56

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

NEW

+56

pw_assert_HandleFailure::_pw_tokenizer_string_entry_35_1

NEW

+54

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

NEW

+54

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

NEW

+50

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

NEW

+50

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

NEW

+46

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

NEW

+46

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

NEW

+44

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

NEW

+44

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

NEW

+44

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

NEW

+42

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+39

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

NEW

+38

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

NEW

+38

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

NEW

+38

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

NEW

+38

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

NEW

+38

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

NEW

+37

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_64_5

NEW

+36

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

NEW

+36

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

NEW

+34

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

NEW

+34

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

NEW

+34

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

NEW

+34

pw::span<>::subspan()

NEW

+32

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

NEW

+32

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

NEW

+32

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+26

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

NEW

+26

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

NEW

+26

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

NEW

+24

pw::PackedPtr<>::set()

NEW

+24

pw::PackedPtr<>::set_packed_value()

NEW

+24

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

NEW

+24

pw::allocator::ForwardSortedBucket<>::MakeAddPredicate()::{lambda()#1}::operator()()

NEW

+24

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

NEW

+24

pw_assert_tokenized_HandleCheckFailure

NEW

+22

pw::IntrusiveMultiMap<>::erase()

NEW

+22

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+22

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

NEW

+22

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

NEW

+22

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

NEW

+20

__cxa_pure_virtual

NEW

+20

fit::internal::null_target<>::ops

NEW

+20

pw::IntrusiveMultiMap<>::end()

NEW

+20

pw::IntrusiveMultiMap<>::equal_range()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

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

NEW

+20

pw::containers::internal::CheckIntrusiveItemIsUncontained()

NEW

+20

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

NEW

+20

write

NEW

+18

pw::AlignDown()

NEW

+18

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

NEW

+18

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

NEW

+18

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

NEW

+18

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

NEW

+18

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

NEW

+18

std::all_of<>()

NEW

+16

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

NEW

+16

pw::AlignUp()

NEW

+16

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

NEW

+16

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

NEW

+16

std::get_terminate()

NEW

+14

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

NEW

+14

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

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::GenericAATree::SetRoot()

NEW

+12

OUTLINED_FUNCTION_0

NEW

+12

pw::IntrusiveMultiMap<>::IntrusiveMultiMap()

NEW

+12

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

NEW

+12

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

NEW

+12

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

NEW

+12

pw::allocator::internal::CrashMisaligned()

NEW

+12

pw::allocator::internal::CrashNextMisaligned()

NEW

+12

pw::allocator::internal::CrashNextPrevMismatched()

NEW

+12

pw::allocator::internal::CrashPoisonCorrupted()

NEW

+12

pw::allocator::internal::CrashPoisonedWhileInUse()

NEW

+12

pw::allocator::internal::CrashPrevMisaligned()

NEW

+12

pw::allocator::internal::CrashPrevNextMismatched()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnAllocated()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnDoubleFree()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnInvalidFree()

NEW

+10

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

NEW

+10

std::terminate()

NEW

+8

__cxxabiv1::__terminate()

NEW

+6

OUTLINED_FUNCTION_1

NEW

+6

fit::internal::inline_trivial_target_move<>()

NEW

+6

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

NEW

+6

pw::allocator::FastSortedItem<>::key()

NEW

+4

fit::internal::unshared_target_type_id()

NEW

+4

pw::Allocator::DoResize()

NEW

+4

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

NEW

+2

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

+6,952

BuddyAllocator

FLASH

DEL

-596

__aeabi_dmul

DEL

-464

__aeabi_ddiv

DEL

-197

__aeabi_dsub

DEL

-160

__aeabi_d2f

DEL

-140

__gtdf2

DEL

-108

__floatundidf

DEL

-102

pw::allocator::SizeReporter::Measure()

DEL

-80

__aeabi_d2iz

DEL

-68

__extendsfdf2

+1

pw_assert_tokenized_HandleAssertFailure::_pw_tokenizer_string_entry_60_5

DEL

-44

__aeabi_dcmpun

DEL

-38

pw::allocator::SizeReporter::SetBaseline()

DEL

-36

__aeabi_i2d

DEL

-36

pw::Allocator::Reallocate()

DEL

-34

main

DEL

-32

__aeabi_cdrcmple

DEL

-32

__aeabi_ui2d

DEL

-32

pw::UniquePtr<>::Reset()

-2

pw::tokenizer::EncodedMessage<>::EncodedMessage()

DEL

-26

_ZN2pw9Allocator3NewINS_9allocator12SizeReporter3FooETpTnRiJEJEEEPT_DpOT1_

DEL

-20

__aeabi_dcmpeq

DEL

-20

__aeabi_dcmpge

DEL

-20

__aeabi_dcmpgt

DEL

-20

__aeabi_dcmple

DEL

-20

__aeabi_dcmplt

DEL

-14

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

+4

p05.0

DEL

-6

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

+2

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

DEL

-4

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

+2

pw_boot_PreMainInit

DEL

-2

pw::Deallocator::~Deallocator()

NEW

+308

pw::allocator::internal::CrashNextPrevMismatched()::_pw_tokenizer_string_entry_40_3

NEW

+308

pw::allocator::internal::CrashPrevNextMismatched()::_pw_tokenizer_string_entry_59_7

NEW

+253

pw::allocator::internal::CrashNextMisaligned()::_pw_tokenizer_string_entry_29_1

NEW

+253

pw::allocator::internal::CrashPrevMisaligned()::_pw_tokenizer_string_entry_48_5

NEW

+201

pw::allocator::internal::CrashPoisonedWhileInUse()::_pw_tokenizer_string_entry_26_1

NEW

+196

pw::allocator::internal::CrashPoisonCorrupted()::_pw_tokenizer_string_entry_31_3

NEW

+183

pw::containers::internal::CheckIntrusiveItemIsUncontained()::_pw_tokenizer_string_entry_28_3

NEW

+167

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

NEW

+164

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

NEW

+156

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_62_1

NEW

+156

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_63_3

NEW

+125

pw::allocator::internal::CrashMisaligned()::_pw_tokenizer_string_entry_26_1

NEW

+125

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

NEW

+116

pw::allocator::internal::GenericBuddyAllocator::Allocate()

NEW

+112

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

NEW

+106

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_64_7

NEW

+80

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

NEW

+70

pw::GetAlignedSubspan()

NEW

+70

pw::allocator::internal::GenericBuddyAllocator::GetLayout()

NEW

+56

pw_assert_HandleFailure::_pw_tokenizer_string_entry_35_1

NEW

+52

pw::allocator::BuddyAllocator<>

NEW

+42

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

NEW

+40

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

NEW

+37

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_64_5

NEW

+36

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

NEW

+34

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

NEW

+34

pw::span<>::subspan()

NEW

+32

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

NEW

+30

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

NEW

+28

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

NEW

+28

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

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+24

pw_assert_tokenized_HandleCheckFailure

NEW

+24

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

NEW

+22

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

NEW

+22

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

NEW

+22

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

NEW

+22

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

NEW

+20

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

NEW

+20

pw::containers::internal::CheckIntrusiveItemIsUncontained()

NEW

+20

pw::span<>::back()

NEW

+18

pw::AlignDown()

NEW

+16

pw::AlignUp()

NEW

+16

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

NEW

+16

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

NEW

+16

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

NEW

+14

pw::Result<>::value()

NEW

+12

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

NEW

+8

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

NEW

+4

pw::Allocator::DoResize()

NEW

+4

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

NEW

+2

pw_boot_PreStaticConstructorInit

+1,648

BumpAllocator

FLASH

-4

quorem

+2

pw::allocator::SizeReporter::Measure()

+16

main

-2

pw::tokenizer::EncodedMessage<>::EncodedMessage()

+4

p05.0

+2

pw::allocator::internal::BaseUniquePtr::Deallocate()

DEL

-6

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

+2

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

DEL

-4

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

DEL

-2

pw::Deallocator::~Deallocator()

NEW

+70

pw::GetAlignedSubspan()

NEW

+52

pw::allocator::BumpAllocator

NEW

+50

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

NEW

+40

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

NEW

+40

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

NEW

+34

pw::span<>::subspan()

NEW

+22

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

NEW

+18

pw::AlignDown()

NEW

+18

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

NEW

+16

pw::AlignUp()

NEW

+6

pw::Deallocator::DoDeallocate()

NEW

+4

pw::Allocator::DoResize()

NEW

+4

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

NEW

+2

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

+384

FirstFitAllocator

FLASH

DEL

-596

__aeabi_dmul

DEL

-464

__aeabi_ddiv

+30

[section .code]

DEL

-197

__aeabi_dsub

DEL

-160

__aeabi_d2f

DEL

-140

__gtdf2

DEL

-108

__floatundidf

DEL

-102

pw::allocator::SizeReporter::Measure()

DEL

-80

__aeabi_d2iz

DEL

-68

__extendsfdf2

+1

pw_assert_tokenized_HandleAssertFailure::_pw_tokenizer_string_entry_60_5

DEL

-44

__aeabi_dcmpun

DEL

-38

pw::allocator::SizeReporter::SetBaseline()

DEL

-36

__aeabi_i2d

DEL

-36

pw::Allocator::Reallocate()

DEL

-34

main

DEL

-32

__aeabi_cdrcmple

DEL

-32

__aeabi_ui2d

DEL

-32

pw::UniquePtr<>::Reset()

DEL

-26

_ZN2pw9Allocator3NewINS_9allocator12SizeReporter3FooETpTnRiJEJEEEPT_DpOT1_

DEL

-20

__aeabi_dcmpeq

DEL

-20

__aeabi_dcmpge

DEL

-20

__aeabi_dcmpgt

DEL

-20

__aeabi_dcmple

DEL

-20

__aeabi_dcmplt

DEL

-14

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

DEL

-6

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

+2

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

DEL

-4

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

+2

DefaultFaultHandler

DEL

-2

pw::Deallocator::~Deallocator()

NEW

+340

std::__find_if<>()

NEW

+308

pw::allocator::internal::CrashNextPrevMismatched()::_pw_tokenizer_string_entry_40_3

NEW

+308

pw::allocator::internal::CrashPrevNextMismatched()::_pw_tokenizer_string_entry_59_7

NEW

+253

pw::allocator::internal::CrashPrevMisaligned()::_pw_tokenizer_string_entry_48_5

NEW

+201

pw::allocator::internal::CrashPoisonedWhileInUse()::_pw_tokenizer_string_entry_26_1

NEW

+196

pw::allocator::internal::CrashPoisonCorrupted()::_pw_tokenizer_string_entry_31_3

NEW

+191

pw::allocator::internal::CrashNextMisaligned()::_pw_tokenizer_string_entry_29_1

NEW

+184

pw::allocator::internal::CrashMisaligned()::_pw_tokenizer_string_entry_26_1

NEW

+183

pw::containers::internal::CheckIntrusiveItemIsUncontained()::_pw_tokenizer_string_entry_28_3

NEW

+167

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

NEW

+158

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

NEW

+156

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

NEW

+156

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_62_1

NEW

+156

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_63_3

NEW

+143

pw::allocator::internal::GenericBlockAllocator::CrashOnDoubleFree()::_pw_tokenizer_string_entry_37_5

NEW

+142

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

NEW

+142

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

NEW

+140

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

NEW

+136

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

NEW

+128

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

NEW

+120

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

NEW

+110

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

NEW

+106

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_64_7

NEW

+100

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

NEW

+94

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

NEW

+92

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

NEW

+92

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

NEW

+82

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

NEW

+82

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

NEW

+80

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

NEW

+76

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

NEW

+72

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

NEW

+70

pw::GetAlignedSubspan()

NEW

+66

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

NEW

+64

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

NEW

+64

pw::allocator::BlockAllocator<>

NEW

+64

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

NEW

+64

pw::allocator::FirstFitAllocator<>

NEW

+64

std::find_if<>()

NEW

+58

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

NEW

+56

pw_assert_HandleFailure::_pw_tokenizer_string_entry_35_1

NEW

+54

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

NEW

+50

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

NEW

+50

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

NEW

+50

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

NEW

+46

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

NEW

+46

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

NEW

+44

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

NEW

+44

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

NEW

+38

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

NEW

+38

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

NEW

+37

pw::bloat::BloatThisBinary()::_pw_tokenizer_string_entry_64_5

NEW

+36

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

NEW

+36

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

NEW

+34

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

NEW

+34

pw::span<>::subspan()

NEW

+32

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

NEW

+32

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+26

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

NEW

+26

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

NEW

+26

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

NEW

+24

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

NEW

+24

pw_assert_tokenized_HandleCheckFailure

NEW

+22

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

NEW

+22

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

NEW

+20

__cxa_pure_virtual

NEW

+20

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

NEW

+20

pw::containers::internal::CheckIntrusiveItemIsUncontained()

NEW

+20

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

NEW

+20

write

NEW

+18

pw::AlignDown()

NEW

+18

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

NEW

+18

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

NEW

+18

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

NEW

+18

std::all_of<>()

NEW

+16

pw::AlignUp()

NEW

+16

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

NEW

+16

std::get_terminate()

NEW

+15

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

NEW

+14

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

NEW

+14

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

NEW

+12

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

NEW

+12

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

NEW

+12

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

NEW

+12

pw::allocator::internal::CrashMisaligned()

NEW

+12

pw::allocator::internal::CrashNextMisaligned()

NEW

+12

pw::allocator::internal::CrashNextPrevMismatched()

NEW

+12

pw::allocator::internal::CrashPoisonCorrupted()

NEW

+12

pw::allocator::internal::CrashPoisonedWhileInUse()

NEW

+12

pw::allocator::internal::CrashPrevMisaligned()

NEW

+12

pw::allocator::internal::CrashPrevNextMismatched()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnAllocated()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnDoubleFree()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnInvalidFree()

NEW

+10

std::terminate()

NEW

+8

__cxxabiv1::__terminate()

NEW

+8

__gnu_cxx::__ops::_Iter_pred<>::operator()<>()

NEW

+6

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

NEW

+6

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

NEW

+4

pw::Allocator::DoResize()

NEW

+4

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

NEW

+2

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

+4,736

LibCAllocator

FLASH

-4

quorem

+2

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt9enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEES9_

+4

p05.0

+2

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

DEL

-6

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

DEL

-4

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

NEW

+92

_realloc_r

NEW

+52

pw::allocator::LibCAllocator

NEW

+16

_malloc_usable_size_r

NEW

+16

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

NEW

+16

realloc

NEW

+14

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

NEW

+8

pw::allocator::GetLibCAllocator()

NEW

+6

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

NEW

+6

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

NEW

+4

pw::Allocator::DoResize()

+224

WorstFitAllocator

FLASH

DEL

-596

__aeabi_dmul

DEL

-464

__aeabi_ddiv

+30

[section .code]

-4

quorem

DEL

-197

__aeabi_dsub

DEL

-160

__aeabi_d2f

DEL

-140

__gtdf2

DEL

-108

__floatundidf

DEL

-102

pw::allocator::SizeReporter::Measure()

DEL

-80

__aeabi_d2iz

DEL

-68

__extendsfdf2

+1

pw_assert_tokenized_HandleAssertFailure::_pw_tokenizer_string_entry_60_5

DEL

-44

__aeabi_dcmpun

DEL

-38

pw::allocator::SizeReporter::SetBaseline()

DEL

-36

__aeabi_i2d

DEL

-36

pw::Allocator::Reallocate()

DEL

-34

main

DEL

-32

__aeabi_cdrcmple

DEL

-32

__aeabi_ui2d

DEL

-32

pw::UniquePtr<>::Reset()

DEL

-26

_ZN2pw9Allocator3NewINS_9allocator12SizeReporter3FooETpTnRiJEJEEEPT_DpOT1_

DEL

-20

__aeabi_dcmpeq

DEL

-20

__aeabi_dcmpge

DEL

-20

__aeabi_dcmpgt

DEL

-20

__aeabi_dcmple

DEL

-20

__aeabi_dcmplt

DEL

-14

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

+4

p05.0

+2

pw::allocator::internal::BaseUniquePtr::Deallocate()

DEL

-6

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

DEL

-4

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

+2

DefaultFaultHandler

DEL

-2

pw::Deallocator::~Deallocator()

NEW

+308

pw::allocator::internal::CrashNextPrevMismatched()::_pw_tokenizer_string_entry_40_3

NEW

+308

pw::allocator::internal::CrashPrevNextMismatched()::_pw_tokenizer_string_entry_59_7

NEW

+271

pw::allocator::internal::GenericBlockAllocator::CrashOnAllocated()::_pw_tokenizer_string_entry_26_1

NEW

+253

pw::allocator::internal::CrashNextMisaligned()::_pw_tokenizer_string_entry_29_1

NEW

+253

pw::allocator::internal::CrashPrevMisaligned()::_pw_tokenizer_string_entry_48_5

NEW

+240

std::__find_if<>()

NEW

+201

pw::allocator::internal::CrashPoisonedWhileInUse()::_pw_tokenizer_string_entry_26_1

NEW

+196

pw::allocator::internal::CrashPoisonCorrupted()::_pw_tokenizer_string_entry_31_3

NEW

+186

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

NEW

+184

pw::allocator::internal::CrashMisaligned()::_pw_tokenizer_string_entry_26_1

NEW

+184

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

NEW

+183

pw::containers::internal::CheckIntrusiveItemIsUncontained()::_pw_tokenizer_string_entry_28_3

NEW

+167

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

NEW

+158

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

NEW

+156

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

NEW

+143

pw::allocator::internal::GenericBlockAllocator::CrashOnDoubleFree()::_pw_tokenizer_string_entry_37_5

NEW

+142

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

NEW

+142

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

NEW

+140

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

NEW

+140

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

NEW

+136

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

NEW

+128

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

NEW

+122

pw::allocator::internal::GenericBlockAllocator::CrashOnInvalidFree()::_pw_tokenizer_string_entry_33_3

NEW

+120

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

NEW

+110

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

NEW

+100

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

NEW

+96

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

NEW

+92

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

NEW

+92

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

NEW

+92

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

NEW

+84

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

NEW

+84

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

NEW

+82

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

NEW

+82

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

NEW

+82

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

NEW

+80

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

NEW

+72

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

NEW

+72

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

NEW

+70

pw::GetAlignedSubspan()

NEW

+70

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

NEW

+68

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

NEW

+66

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

NEW

+64

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

NEW

+64

pw::allocator::BlockAllocator<>

NEW

+64

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

NEW

+64

pw::allocator::WorstFitAllocator<>

NEW

+64

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

NEW

+62

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

NEW

+58

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

NEW

+56

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

NEW

+56

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

NEW

+56

pw_assert_HandleFailure::_pw_tokenizer_string_entry_35_1

NEW

+54

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

NEW

+54

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

NEW

+54

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

NEW

+50

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

NEW

+50

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

NEW

+48

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

NEW

+46

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

NEW

+46

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

NEW

+44

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

NEW

+44

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

NEW

+44

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

NEW

+42

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+40

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

NEW

+38

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

NEW

+38

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

NEW

+38

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

NEW

+38

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

NEW

+36

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

NEW

+36

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

NEW

+36

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

NEW

+34

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

NEW

+34

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

NEW

+34

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

NEW

+34

pw::span<>::subspan()

NEW

+32

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

NEW

+32

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

NEW

+32

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+30

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+28

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

NEW

+26

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

NEW

+26

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

NEW

+26

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

NEW

+26

pw::allocator::ReverseSortedBucket<>::MakeAddPredicate()::{lambda()#1}::operator()()

NEW

+24

pw::PackedPtr<>::set()

NEW

+24

pw::PackedPtr<>::set_packed_value()

NEW

+24

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

NEW

+24

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

NEW

+24

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

NEW

+24

pw_assert_tokenized_HandleCheckFailure

NEW

+22

pw::IntrusiveMultiMap<>::erase()

NEW

+22

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

NEW

+22

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

NEW

+22

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

NEW

+22

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

NEW

+20

__cxa_pure_virtual

NEW

+20

fit::internal::null_target<>::ops

NEW

+20

pw::IntrusiveMultiMap<>::begin()

NEW

+20

pw::IntrusiveMultiMap<>::end()

NEW

+20

pw::IntrusiveMultiMap<>::equal_range()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

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

NEW

+20

pw::containers::internal::CheckIntrusiveItemIsUncontained()

NEW

+20

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

NEW

+20

write

NEW

+18

pw::AlignDown()

NEW

+18

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

NEW

+18

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

NEW

+18

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

NEW

+18

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

NEW

+18

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

NEW

+18

std::all_of<>()

NEW

+16

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

NEW

+16

pw::AlignUp()

NEW

+16

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

NEW

+16

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

NEW

+16

std::get_terminate()

NEW

+15

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

NEW

+14

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

NEW

+14

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

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::GenericAATree::SetRoot()

NEW

+12

OUTLINED_FUNCTION_0

NEW

+12

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

NEW

+12

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

NEW

+12

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

NEW

+12

pw::allocator::internal::CrashMisaligned()

NEW

+12

pw::allocator::internal::CrashNextMisaligned()

NEW

+12

pw::allocator::internal::CrashNextPrevMismatched()

NEW

+12

pw::allocator::internal::CrashPoisonCorrupted()

NEW

+12

pw::allocator::internal::CrashPoisonedWhileInUse()

NEW

+12

pw::allocator::internal::CrashPrevMisaligned()

NEW

+12

pw::allocator::internal::CrashPrevNextMismatched()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnAllocated()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnDoubleFree()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnInvalidFree()

NEW

+10

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

NEW

+10

std::terminate()

NEW

+8

__cxxabiv1::__terminate()

NEW

+6

OUTLINED_FUNCTION_1

NEW

+6

fit::internal::inline_trivial_target_move<>()

NEW

+6

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

NEW

+6

pw::allocator::FastSortedItem<>::key()

NEW

+4

fit::internal::unshared_target_type_id()

NEW

+4

pw::Allocator::DoResize()

NEW

+4

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

NEW

+2

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

+6,992

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

+2

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

+4

p05.0

+28

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

NEW

+196

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

NEW

+52

pw::allocator::FallbackAllocator

NEW

+44

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

NEW

+44

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

NEW

+44

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

NEW

+36

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

NEW

+30

pw::Deallocator::Recognizes()

NEW

+26

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

NEW

+6

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

+512

AsPmrAllocator

FLASH

+2

[section .code]

-3

_ctype_

DEL

-179

pw::allocator::internal::GenericBlockAllocator::CrashOnInvalidFree()::_pw_tokenizer_string_entry_33_3

-34

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

DEL

-118

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

+72

pw::allocator::internal::GenericBlockAllocator::CrashOnDoubleFree()::_pw_tokenizer_string_entry_37_5

+14

operator new()

+6

operator delete()

DEL

-2

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

NEW

+271

pw::allocator::internal::GenericBlockAllocator::CrashOnAllocated()::_pw_tokenizer_string_entry_26_1

NEW

+156

_memalign_r

NEW

+116

__cxxabiv1::__si_class_type_info::__do_dyncast()

NEW

+100

__cxxabiv1::__si_class_type_info

NEW

+92

__cxxabiv1::__class_type_info

NEW

+80

std::pmr::(anonymous namespace)::newdel_res_t

NEW

+76

std::pmr::(anonymous namespace)::null_res_t

NEW

+74

__cxxabiv1::__class_type_info::__do_upcast()

NEW

+68

_GLOBAL__sub_I__ZNSt3pmr15memory_resourceD2Ev

NEW

+62

__cxxabiv1::__class_type_info::__do_dyncast()

NEW

+60

__cxxabiv1::__si_class_type_info::__do_find_public_src()

NEW

+44

std::type_info::operator==()

NEW

+42

__cxxabiv1::__class_type_info::__do_catch()

NEW

+42

__cxxabiv1::__si_class_type_info::__do_upcast()

NEW

+40

__cxxabiv1::__class_type_info::~__class_type_info()

NEW

+40

__cxxabiv1::__si_class_type_info::~__si_class_type_info()

NEW

+40

__popcountsi2

NEW

+35

std::pmr::memory_resource

NEW

+28

__cxa_atexit

NEW

+28

pw::allocator::internal::MemoryResource

NEW

+28

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

NEW

+24

std::type_info

NEW

+18

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

NEW

+16

memalign

NEW

+14

__cxxabiv1::__class_type_info::__do_find_public_src()

NEW

+14

std::pmr::(anonymous namespace)::newdel_res_t::~newdel_res_t()

NEW

+12

__aeabi_atexit

NEW

+12

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

NEW

+10

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

NEW

+10

std::pmr::(anonymous namespace)::newdel_res_t::do_deallocate()

NEW

+8

std::pmr::(anonymous namespace)::newdel_res_t::do_allocate()

NEW

+8

std::pmr::(anonymous namespace)::newdel_res_t::do_is_equal()

NEW

+8

std::pmr::(anonymous namespace)::null_res_t::do_allocate()

NEW

+2

std::pmr::(anonymous namespace)::null_res_t::do_deallocate()

+1,436

SynchronizedAllocator<sync::InterruptSpinLock>

FLASH

-4

quorem

+147

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

+4

p05.0

-2

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

+2

pw::allocator::internal::BaseUniquePtr::Deallocate()

DEL

-4

pw::Allocator::DoResize()

NEW

+52

pw::allocator::SynchronizedAllocator<>

NEW

+40

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

NEW

+36

pw::Allocator::Reallocate()

NEW

+32

pw::UniquePtr<>::Reset()

NEW

+28

pw::sync::InterruptSpinLock::lock()

NEW

+26

_ZN2pw9Allocator3NewINS_9allocator12SizeReporter3FooETpTnRiJEJEEEPT_DpOT1_

NEW

+22

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

NEW

+22

pw::sync::Borrowable<>::acquire()

NEW

+16

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

NEW

+12

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

NEW

+3

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

+432

SynchronizedAllocator<sync::Mutex>

FLASH

+147

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

+4

p05.0

+2

pw::allocator::internal::BaseUniquePtr::Deallocate()

DEL

-4

pw::Allocator::DoResize()

DEL

-2

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

NEW

+52

pw::allocator::SynchronizedAllocator<>

NEW

+36

pw::Allocator::Reallocate()

NEW

+36

pw::sync::Mutex::unlock()

NEW

+32

pw::UniquePtr<>::Reset()

NEW

+28

pw::sync::Mutex::lock()

NEW

+27

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

NEW

+26

_ZN2pw9Allocator3NewINS_9allocator12SizeReporter3FooETpTnRiJEJEEEPT_DpOT1_

NEW

+22

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

NEW

+22

pw::sync::Borrowable<>::acquire()

NEW

+16

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

NEW

+16

pw::sync::BorrowedPointer<>::~BorrowedPointer()

NEW

+12

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

+472

TrackingAllocator<AllMetrics>

FLASH

+62

pw::allocator::internal::CrashNextMisaligned()::_pw_tokenizer_string_entry_29_1

DEL

-156

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

DEL

-142

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

DEL

-128

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

-30

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

DEL

-50

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

+32

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

DEL

-28

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

DEL

-22

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

DEL

-20

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

DEL

-15

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

DEL

-14

pw::Allocator::Resize()

DEL

-14

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

+4

p05.0

-2

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

+2

pw::allocator::internal::BaseUniquePtr::Deallocate()

DEL

-6

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

DEL

-6

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

DEL

-4

pw::Allocator::DoResize()

DEL

-4

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

NEW

+271

pw::allocator::internal::GenericBlockAllocator::CrashOnAllocated()::_pw_tokenizer_string_entry_26_1

NEW

+204

pw::allocator::internal::AllMetrics::AllMetrics()

NEW

+178

pw::allocator::internal::GenericBlockAllocator::CrashOnInvalidFree()::_pw_tokenizer_string_entry_33_3

NEW

+132

pw::allocator::internal::Metrics<>::Metrics()

NEW

+104

pw::metric::Metric::SetFloat()::_pw_tokenizer_string_entry_94_11

NEW

+104

pw::metric::Metric::as_float()::_pw_tokenizer_string_entry_65_1

NEW

+102

pw::metric::Metric::Decrement()::_pw_tokenizer_string_entry_82_7

NEW

+102

pw::metric::Metric::Increment()::_pw_tokenizer_string_entry_75_5

NEW

+102

pw::metric::Metric::SetInt()::_pw_tokenizer_string_entry_89_9

NEW

+102

pw::metric::Metric::as_int()::_pw_tokenizer_string_entry_70_3

NEW

+81

pw::metric::Metric::Dump()::_pw_tokenizer_string_entry_109_15

NEW

+81

pw::metric::Metric::Dump()::_pw_tokenizer_string_entry_115_19

NEW

+77

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_141_31

NEW

+73

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_144_35

NEW

+69

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_132_23

NEW

+69

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_134_27

NEW

+52

pw::allocator::TrackingAllocator<>

NEW

+37

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_132_21

NEW

+37

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_134_25

NEW

+37

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_141_29

NEW

+37

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_144_33

NEW

+37

pw::metric::Metric::Dump()::_pw_tokenizer_string_entry_109_13

NEW

+37

pw::metric::Metric::Dump()::_pw_tokenizer_string_entry_115_17

NEW

+36

pw::metric::Metric::Decrement()

NEW

+36

pw::metric::Metric::Increment()

NEW

+28

pw::metric::Metric::SetInt()

NEW

+28

pw::metric::Metric::as_int()

+1,712

TrackingAllocator<NoMetrics>

FLASH

-4

quorem

+62

pw::allocator::internal::CrashNextMisaligned()::_pw_tokenizer_string_entry_29_1

DEL

-156

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

DEL

-142

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

DEL

-128

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

DEL

-120

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

-36

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

DEL

-58

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

DEL

-54

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

DEL

-50

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

DEL

-38

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

DEL

-38

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

DEL

-30

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

DEL

-30

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

DEL

-30

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

DEL

-28

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

DEL

-26

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

DEL

-24

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

DEL

-22

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

DEL

-22

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

DEL

-20

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

DEL

-18

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

DEL

-18

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

DEL

-15

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

DEL

-14

_ZN2pw15internal_result12StatusOrDataINS_9allocator6LayoutELb1EEC2INS_6StatusETnNSt9enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEES9_

DEL

-14

pw::Allocator::Resize()

DEL

-14

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

+4

p05.0

-2

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

DEL

-12

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

+2

pw::allocator::internal::BaseUniquePtr::Deallocate()

DEL

-6

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

DEL

-6

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

DEL

-4

pw::Allocator::DoResize()

DEL

-4

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

DEL

-2

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

NEW

+271

pw::allocator::internal::GenericBlockAllocator::CrashOnAllocated()::_pw_tokenizer_string_entry_26_1

NEW

+178

pw::allocator::internal::GenericBlockAllocator::CrashOnInvalidFree()::_pw_tokenizer_string_entry_33_3

NEW

+104

pw::metric::Metric::SetFloat()::_pw_tokenizer_string_entry_94_11

NEW

+104

pw::metric::Metric::as_float()::_pw_tokenizer_string_entry_65_1

NEW

+102

pw::metric::Metric::Decrement()::_pw_tokenizer_string_entry_82_7

NEW

+102

pw::metric::Metric::Increment()::_pw_tokenizer_string_entry_75_5

NEW

+102

pw::metric::Metric::SetInt()::_pw_tokenizer_string_entry_89_9

NEW

+102

pw::metric::Metric::as_int()::_pw_tokenizer_string_entry_70_3

NEW

+81

pw::metric::Metric::Dump()::_pw_tokenizer_string_entry_109_15

NEW

+81

pw::metric::Metric::Dump()::_pw_tokenizer_string_entry_115_19

NEW

+77

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_141_31

NEW

+73

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_144_35

NEW

+69

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_132_23

NEW

+69

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_134_27

NEW

+52

pw::allocator::TrackingAllocator<>

NEW

+37

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_132_21

NEW

+37

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_134_25

NEW

+37

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_141_29

NEW

+37

pw::metric::Group::Dump()::_pw_tokenizer_string_entry_144_33

NEW

+37

pw::metric::Metric::Dump()::_pw_tokenizer_string_entry_109_13

NEW

+37

pw::metric::Metric::Dump()::_pw_tokenizer_string_entry_115_17

+672