Code size analysis#

pw_multibuf: A buffer API optimized for zero-copy messaging

The following table shows the code size cost of using pw_multibuf. These size reports compare a fake MultiBuf implementation against the v1 and v2 pw_multibuf implementations, and also compares the two pw_multibuf implementations against each other.

The scenarios being measured involve sending and receiving data using a fake protocol stack. At the lowest layer, “DemoLink” frames carry “DemoNetwork” packets, which in turn carry segments of a “DemoTransport” message. This layered protocol demonstrates how different MultiBuf implementations can handle data encapsulation and fragmentation.

The v0 implementation uses simple, contiguous spans of memory, requiring data to be copied at each protocol layer. In contrast, pw_multibuf is designed to avoid these copies. It allows for reserving space for headers and footers, and can represent data as a collection of discontiguous memory chunks. This reduces memory usage and improves performance by minimizing data movement.

The key difference between pw_multibuf v1 and v2 lies in their approach to memory management. Version 1 integrates memory allocation directly, with a MultiBufAllocator that handles the creation of MultiBuf objects. Version 2 separates memory allocation from the buffer logic, allowing users to provide their own allocation schemes. Additionally, v2 introduces the concept of “layers” to more explicitly manage different views of the data, such as protocol layers.

Label

Segment

Delta

Cost of using MultiBuf v1 vs. a fake implementation

FLASH

+264

[section .rodata]

DEL

-448

pw::multibuf::size_report::SenderV0

-8

pw::multibuf::size_report::TransferMessage()

DEL

-164

pw::multibuf::size_report::ReceiverV0

-4

pw::multibuf::size_report::Sender<>::MakeDemoLinkFrame()

+32

pw::multibuf::size_report::TransferMessage<>()

-12

pw::multibuf::size_report::Sender<>::MakeDemoTransportSegment()

-22

pw::multibuf::size_report::Receiver<>::HandleDemoLinkFrame()

+4

pw::multibuf::size_report::Receiver<>::DoPend()

-4

pw::multibuf::size_report::Sender<>::MakeDemoNetworkPacket()

+12

pw::containers::internal::GenericDeque<>::pop_front()

DEL

-100

pw::multibuf::size_report::FakeMultiBuf::PushBack()

+40

pw::multibuf::size_report::FrameHandler<>::CalculateChecksum()

+4

pw::multibuf::size_report::Receiver<>::HandleDemoNetworkPacket()

DEL

-88

pw::multibuf::size_report::ReceiverV0::~ReceiverV0()

+4

pw::multibuf::size_report::Sender<>::DoPend()

DEL

-88

pw::multibuf::size_report::SenderV0::~SenderV0()

DEL

-84

pw::multibuf::size_report::SenderV0::SenderV0()

DEL

-76

pw::multibuf::size_report::FrameHandlerV0::DoAllocateFrame()

-4

pw::multibuf::size_report::Receiver<>::HandleDemoTransportFirstSegment()

DEL

-60

pw::multibuf::size_report::FakeMultiBuf::set_view()

+18

pw::containers::internal::LegacyIntrusiveList<>::Item::~Item()

+52

pw::containers::internal::GenericDequeBase<>::AbsoluteIndexChecked()

DEL

-52

pw::multibuf::size_report::FrameHandlerV0::DoPushBack()

+2

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

+16

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

DEL

-44

_ZNSt3__212__equal_implB8nn210000IPSt4byteS2_PKS1_S4_NS_10__equal_toENS_10__identityES6_EEbT_T0_T1_T2_RT3_RT4_RT5_

DEL

-40

_ZNSt3__25equalB8nn210000IPSt4bytePKS1_NS_10__equal_toEEEbT_S6_T0_S7_T1_

+40

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

+16

pw::multibuf::size_report::FrameHandler<>::Truncate()

DEL

-40

pw::multibuf::size_report::FrameHandlerV0::DoNarrow()

DEL

-36

pw::multibuf::size_report::FrameHandlerV0::DoWiden()

DEL

-28

pw::multibuf::size_report::FrameHandlerV0::DoTruncate()

+22

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

-4

vClearInterruptMaskFromISR

+18

pw::containers::internal::GenericDeque<>::at()

-4

__bi_84

+2

pw::async2::Dispatcher::~Dispatcher()

DEL

-16

pw::multibuf::size_report::FrameHandlerV0::GetEnd()

+12

pw::containers::internal::DequeIterator<>::operator*()

DEL

-8

_ZNSt3__25equalB8nn210000IPSt4bytePKS1_EEbT_S5_T0_S6_

DEL

-8

pw::multibuf::size_report::FrameHandlerV0::GetBegin()

DEL

-8

pw::multibuf::size_report::FrameHandlerV0::~FrameHandlerV0()

NEW

+448

pw::multibuf::size_report::ReceiverV1

NEW

+448

pw::multibuf::size_report::SenderV1

NEW

+348

pw::multibuf::SimpleAllocator::DoAllocate()

NEW

+216

pw::multibuf::SimpleAllocator::DoAllocate()::$_0::operator()()

NEW

+172

pw::multibuf::SimpleAllocator::InternalAllocateContiguous()::$_0::operator()()

NEW

+162

pw::multibuf::MultiBuf::CopyFromAndOptionallyTruncate()

NEW

+128

pw::multibuf::SimpleAllocator::InternalAllocateContiguous()

NEW

+116

pw::multibuf::SimpleAllocator::SimpleAllocator()

NEW

+112

pw::multibuf::SimpleAllocator::InsertRegion()

NEW

+106

pw::multibuf::Chunk::ClaimPrefix()

NEW

+106

pw::multibuf::MultiBuf::CopyTo()

NEW

+104

pw::multibuf::Chunk::Slice()

NEW

+102

pw::multibuf::Chunk::ClaimSuffix()

NEW

+98

pw::multibuf::size_report::ReceiverV1::~ReceiverV1()

NEW

+96

pw::multibuf::MultiBuf::DiscardPrefix()

NEW

+92

pw::multibuf::size_report::FrameHandlerV1::DoWiden()

NEW

+90

pw::multibuf::MultiBufAllocator::MoreMemoryAvailable()

NEW

+90

pw::multibuf::SimpleAllocator::GetAvailableMemorySize()

NEW

+90

pw::multibuf::size_report::SenderV1::~SenderV1()

NEW

+84

pw::multibuf::MultiBuf::const_iterator::operator+=()

NEW

+84

pw::multibuf::size_report::SenderV1::SenderV1()

NEW

+80

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

NEW

+80

pw::multibuf::MultiBuf::TruncateAfter()

NEW

+80

pw::multibuf::size_report::FrameHandlerV1::DoAllocateFrame()

NEW

+70

pw::multibuf::ChunkRegionTracker::CreateFirstChunk()

NEW

+70

pw::multibuf::internal::LinkedRegionTracker::~LinkedRegionTracker()

NEW

+68

_ZNSt3__212__equal_implB8nn210000IN2pw8multibuf8MultiBuf8iteratorES4_PKSt4byteS7_NS_10__equal_toENS_10__identityES9_EEbT_T0_T1_T2_RT3_RT4_RT5_

NEW

+66

pw::multibuf::internal::LinkedRegionTracker::Destroy()

NEW

+64

pw::multibuf::Chunk::Free()

NEW

+62

pw::multibuf::MultiBufAllocator::AllocateContiguous()

NEW

+58

_ZNSt3__29__destroyB8nn210000IN2pw10containers8internal13DequeIteratorINS3_20BasicInlineDequeImplINS1_8multibuf8MultiBufENS3_21AsyncCountAndCapacityItLj1EEELj4294967295EEEEEEET_SC_SC_

NEW

+54

pw::multibuf::SimpleAllocator::~SimpleAllocator()

NEW

+52

pw::multibuf::MultiBuf::Truncate()

NEW

+52

pw::multibuf::MultiBufChunks::push_front()

NEW

+52

pw::multibuf::MultiBufChunks::take_front()

NEW

+48

pw::internal_result::StatusOrData<>::AssignStatus<>()

NEW

+44

pw::multibuf::size_report::FrameHandlerV1::DoNarrow()

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_8multibuf10OwnedChunkELb0EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

_ZN2pw15internal_result12StatusOrDataINS_8multibuf8MultiBufELb0EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

NEW

+40

pw::Result<>::value()

NEW

+40

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

NEW

+40

pw::internal_result::StatusOrData<>::~StatusOrData()

NEW

+40

pw::multibuf::MultiBuf::const_iterator::operator++()

NEW

+38

pw::multibuf::MultiBufAllocator::~MultiBufAllocator()

NEW

+38

pw::multibuf::size_report::Receiver<>::TakeReceived()

NEW

+36

pw::Deallocator::DeleteArray<>()

NEW

+36

pw::multibuf::internal::LinkedRegionTracker::LinkedRegionTracker()

NEW

+36

pw::multibuf::size_report::Receiver<>::~Receiver()

NEW

+34

_ZNSt3__25equalB8nn210000IN2pw8multibuf8MultiBuf8iteratorEPKSt4byteNS_10__equal_toEEEbT_S9_T0_SA_T1_

NEW

+34

pw::internal_result::StatusOrData<>::operator=()

NEW

+32

pw::multibuf::ChunkRegionTracker

NEW

+32

pw::multibuf::MultiBuf::begin()

NEW

+32

pw::multibuf::MultiBufAllocator::MultiBufAllocator()

NEW

+32

pw::multibuf::internal::LinkedRegionTracker

NEW

+30

_ZN2pw9Allocator3NewINS_8multibuf8internal19LinkedRegionTrackerETpTnRiJEJRNS2_15SimpleAllocatorERKNS_4spanISt4byteLj4294967295EEEEEENSt3__29enable_ifIXntsr3stdE10is_array_vIT_EEPSF_E4typeEDpOT1_

NEW

+30

pw::internal_result::StatusOrData<>::Assign<>()

NEW

+28

pw::multibuf::ChunkRegionTracker::~ChunkRegionTracker()

NEW

+28

pw::multibuf::MultiBufChunks::PushSuffix()

NEW

+26

pw::multibuf::MultiBuf::ClaimSuffix()

NEW

+24

__aeabi_uidivmod

NEW

+24

pw::multibuf::Chunk::RemoveFromRegionList()

NEW

+24

pw::multibuf::ChunkRegionTracker::ChunkRegionTracker()

NEW

+24

pw::multibuf::MultiBufAllocator

NEW

+24

pw::multibuf::SimpleAllocator

NEW

+24

pw::multibuf::size_report::FrameHandlerV1::DoPushBack()

NEW

+24

pw::multibuf::size_report::FrameHandlerV1::DoTruncate()

NEW

+22

pw::multibuf::MultiBuf::empty()

NEW

+22

pw::multibuf::MultiBufChunks::Release()

NEW

+22

pw::multibuf::MultiBufChunks::operator=()

NEW

+22

pw::multibuf::internal::LinkedRegionTracker::DeallocateChunkClass()

NEW

+20

_ZNSt3__224__optional_destruct_baseIN2pw8multibuf10OwnedChunkELb0EED2B8nn210000Ev

NEW

+20

_ZNSt3__224__optional_destruct_baseIN2pw8multibuf8MultiBufELb0EED2B8nn210000Ev

NEW

+20

_ZNSt3__27destroyB8nn210000IN2pw10containers8internal13DequeIteratorINS3_20BasicInlineDequeImplINS1_8multibuf8MultiBufENS3_21AsyncCountAndCapacityItLj1EEELj4294967295EEEEEEEvT_SC_

NEW

+20

_ZNSt3__29destroy_nB8nn210000IPN2pw8multibuf8internal19LinkedRegionTrackerEjEET_S6_T0_

NEW

+20

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

NEW

+20

pw::multibuf::MultiBuf::const_iterator::AdvanceToData()

NEW

+20

pw::multibuf::MultiBufChunks::size_bytes()

NEW

+20

pw::multibuf::OwnedChunk::Release()

NEW

+20

pw::multibuf::internal::LinkedRegionTracker::AllocateChunkClass()

NEW

+20

pw::multibuf::size_report::FrameHandlerV1::GetBegin()

NEW

+18

_ZNSt3__25equalB8nn210000IN2pw8multibuf8MultiBuf8iteratorEPKSt4byteEEbT_S8_T0_S9_

NEW

+18

pw::containers::internal::GenericDequeBase<>::ClearIndices()

NEW

+18

pw::internal_result::StatusOrData<>::Clear()

NEW

+18

pw::multibuf::MultiBuf::ClaimPrefix()

NEW

+16

pw::multibuf::MultiBuf::const_iterator::end()

NEW

+16

pw::multibuf::size_report::FrameHandlerV1::GetEnd()

NEW

+14

pw::multibuf::MultiBuf::iterator::end()

NEW

+14

pw::multibuf::SimpleAllocator::DoGetBackingCapacity()

NEW

+12

pw::multibuf::Chunk::Truncate()

NEW

+12

pw::multibuf::MultiBuf::CopyFrom()

NEW

+12

pw::multibuf::MultiBufChunks::back()

NEW

+10

_ZN2pw11Deallocator6DeleteINS_8multibuf8internal19LinkedRegionTrackerETpTnRiJETnNSt3__29enable_ifIXntsr3stdE10is_array_vIT_EEiE4typeELi0EEEvPS8_

NEW

+10

pw::multibuf::Chunk::DiscardPrefix()

NEW

+10

pw::multibuf::internal::LinkedRegionTracker::Region()

NEW

+8

pw::multibuf::size_report::FrameHandlerV1::~FrameHandlerV1()

+4,824

RAM

NEW

+1,024

pw::multibuf::size_report::metadata_region

+1,024

Cost of using MultiBuf v2 vs. a fake implementation

FLASH

+1,324

[section .rodata]

DEL

-448

pw::multibuf::size_report::SenderV0

-24

pw::multibuf::size_report::TransferMessage()

DEL

-164

pw::multibuf::size_report::ReceiverV0

-4

pw::multibuf::size_report::Sender<>::MakeDemoLinkFrame()

+36

pw::multibuf::size_report::TransferMessage<>()

-12

pw::multibuf::size_report::Sender<>::MakeDemoTransportSegment()

-20

pw::multibuf::size_report::Receiver<>::HandleDemoLinkFrame()

+6

pw::multibuf::size_report::Receiver<>::DoPend()

-4

pw::multibuf::size_report::Sender<>::MakeDemoNetworkPacket()

+56

pw::containers::internal::GenericDeque<>::pop_front()

DEL

-100

pw::multibuf::size_report::FakeMultiBuf::PushBack()

+52

pw::multibuf::size_report::FrameHandler<>::CalculateChecksum()

+4

pw::multibuf::size_report::Receiver<>::HandleDemoNetworkPacket()

+44

pw::containers::internal::GenericDeque<>::front()

DEL

-88

pw::multibuf::size_report::ReceiverV0::~ReceiverV0()

+8

pw::multibuf::size_report::Sender<>::DoPend()

DEL

-88

pw::multibuf::size_report::SenderV0::~SenderV0()

+60

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

DEL

-84

pw::multibuf::size_report::SenderV0::SenderV0()

DEL

-76

pw::multibuf::size_report::FrameHandlerV0::DoAllocateFrame()

-4

pw::multibuf::size_report::Receiver<>::HandleDemoTransportFirstSegment()

DEL

-60

pw::multibuf::size_report::FakeMultiBuf::set_view()

+52

pw::containers::internal::GenericDequeBase<>::AbsoluteIndexChecked()

DEL

-52

pw::multibuf::size_report::FrameHandlerV0::DoPushBack()

+46

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

DEL

-44

_ZNSt3__212__equal_implB8nn210000IPSt4byteS2_PKS1_S4_NS_10__equal_toENS_10__identityES6_EEbT_T0_T1_T2_RT3_RT4_RT5_

DEL

-40

_ZNSt3__25equalB8nn210000IPSt4bytePKS1_NS_10__equal_toEEEbT_S6_T0_S7_T1_

+16

pw::multibuf::size_report::FrameHandler<>::Truncate()

DEL

-40

pw::multibuf::size_report::FrameHandlerV0::DoNarrow()

DEL

-36

pw::multibuf::size_report::FrameHandlerV0::DoWiden()

+2

pw::Allocator::Reallocate()

+2

pw::checksum::Crc32Impl<>::Update()

+2

pw::metric::Group::Group()

DEL

-28

pw::multibuf::size_report::FrameHandlerV0::DoTruncate()

-2

pw::Allocator::Resize()

+22

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

-12

vClearInterruptMaskFromISR

+18

pw::containers::internal::GenericDeque<>::at()

DEL

-16

pw::multibuf::size_report::FrameHandlerV0::GetEnd()

+12

pw::containers::internal::DequeIterator<>::operator*()

+2

_ZNSt3__213__atomic_baseIjLb0EE21compare_exchange_weakB8nn210000ERjjNS_12memory_orderE

+28

pw::Deallocator::DoDeallocate()

DEL

-8

_ZNSt3__25equalB8nn210000IPSt4bytePKS1_EEbT_S5_T0_S6_

DEL

-8

pw::multibuf::size_report::FrameHandlerV0::GetBegin()

DEL

-8

pw::multibuf::size_report::FrameHandlerV0::~FrameHandlerV0()

NEW

+584

pw::multibuf_impl::GenericMultiBuf::Insert()

NEW

+448

pw::multibuf::size_report::ReceiverV2

NEW

+448

pw::multibuf::size_report::SenderV2

NEW

+296

pw::multibuf_impl::GenericMultiBuf::TryReserveForInsert()

NEW

+268

pw::multibuf_impl::GenericMultiBuf::PopLayer()

NEW

+258

pw::multibuf_impl::ChunkIterator<>::ResetCurrent()

NEW

+256

pw::multibuf_impl::ChunkIterator<>::operator–()

NEW

+232

pw::multibuf_impl::GenericMultiBuf::Clear()

NEW

+224

pw::multibuf_impl::GenericMultiBuf::InsertEntries()

NEW

+216

pw::multibuf_impl::ChunkIterator<>::operator++()

NEW

+216

pw::multibuf_impl::GenericMultiBuf::AddLayer()

NEW

+188

pw::multibuf_impl::GenericMultiBuf::TruncateTopLayer()

NEW

+176

pw::multibuf_impl::ChunkIterator<>::operator->()

NEW

+176

pw::multibuf_impl::operator-()

NEW

+172

pw::multibuf_impl::GenericMultiBuf::SetLayer()

NEW

+144

pw::multibuf_impl::GenericMultiBuf::SplitBase()

NEW

+140

pw::allocator::ChunkPool::ChunkPool()

NEW

+136

pw::multibuf_impl::GenericMultiBuf::TryReserveEntries()

NEW

+132

pw::DynamicDeque<>::ReallocateBuffer()

NEW

+128

_ZNSt3__25equalB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEEPKSt4byteNS_10__equal_toEEEbT_S9_T0_SA_T1_

NEW

+128

pw::multibuf_impl::ByteIterator<>::operator+=()

NEW

+128

pw::multibuf_impl::GenericMultiBuf::SplitAfter()

NEW

+128

pw::multibuf_impl::GenericMultiBuf::SplitBefore()

NEW

+124

pw::multibuf::size_report::FrameHandlerV2::DoAllocateFrame()

NEW

+120

pw::multibuf_impl::ByteIterator<>::operator-=()

NEW

+112

pw::allocator::ChunkPool::DoGetInfo()

NEW

+112

pw::containers::internal::GenericDeque<>::operator[]()

NEW

+112

pw::multibuf_impl::GenericMultiBuf::IsCompatible()

NEW

+100

pw::multibuf_impl::GenericMultiBuf::CopyToImpl()

NEW

+98

pw::multibuf::size_report::ReceiverV2::~ReceiverV2()

NEW

+98

pw::multibuf_impl::GenericMultiBuf::CopyFrom()

NEW

+96

pw::multibuf::size_report::ReceiverV2::ReceiverV2()

NEW

+96

pw::multibuf::size_report::SenderV2::SenderV2()

NEW

+92

pw::multibuf::size_report::SenderV2::~SenderV2()

NEW

+92

pw::multibuf_impl::ByteIterator<>::Compare()

NEW

+92

pw::multibuf_impl::GenericMultiBuf::CheckRange()

NEW

+92

pw::multibuf_impl::GenericMultiBuf::UnsealTopLayer()

NEW

+88

pw::multibuf_impl::ChunkIterator<>::data()

NEW

+88

pw::multibuf_impl::ChunkIterator<>::operator*()

NEW

+88

pw::multibuf_impl::GenericMultiBuf::GetIndexAndOffset()

NEW

+84

pw::multibuf_impl::operator==()

NEW

+80

pw::containers::internal::GenericDeque<>::contiguous_data()

NEW

+80

pw::containers::internal::GenericDeque<>::push_back()

NEW

+74

pw::DynamicDeque<>::try_reserve()

NEW

+74

pw::multibuf_impl::ChunkIterator<>::ChunkIterator()

NEW

+72

_ZNSt3__212__equal_implB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEES4_PKSt4byteS7_NS_10__equal_toENS_10__identityES9_EEbT_T0_T1_T2_RT3_RT4_RT5_

NEW

+72

pw::allocator::Pool::NewArray<>()

NEW

+68

pw::DynamicDeque<>::IncreaseCapacity()

NEW

+64

pw::BasicMultiBuf<>::PushBack()

NEW

+60

pw::containers::internal::GenericDeque<>::back()

NEW

+60

pw::multibuf::size_report::FrameHandlerV2::DoNarrow()

NEW

+60

pw::multibuf_impl::GenericMultiBuf::cend()

NEW

+60

pw::multibuf_impl::GenericMultiBuf::end()

NEW

+58

_ZNSt3__29__destroyB8nn210000IN2pw10containers8internal13DequeIteratorINS3_20BasicInlineDequeImplINS1_13multibuf_impl8InstanceINS1_13BasicMultiBufIJLNS1_16MultiBufPropertyE2EEEEEENS3_21AsyncCountAndCapacityItLj1EEELj4294967295EEEEEEET_SG_SG_

NEW

+58

pw::BasicMultiBuf<>::Insert()

NEW

+58

pw::multibuf_impl::GenericMultiBuf::begin()

NEW

+58

pw::multibuf_impl::GenericMultiBuf::cbegin()

NEW

+56

pw::multibuf_impl::ChunkIterator<>::size()

NEW

+56

pw::multibuf_impl::GenericMultiBuf::FindShared()

NEW

+56

pw::multibuf_impl::GenericMultiBuf::GetDeallocator()

NEW

+54

pw::multibuf_impl::GenericMultiBuf::IsTopLayerSealed()

NEW

+52

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

NEW

+52

pw::multibuf_impl::GenericMultiBuf::GetControlBlock()

NEW

+50

pw::multibuf::size_report::FrameHandlerV2::DoWiden()

NEW

+48

pw::DynamicDeque<>::operator=()

NEW

+48

pw::multibuf::size_report::Receiver<>::TakeReceived()

NEW

+48

pw::multibuf_impl::GenericMultiBuf::NumFragments()

NEW

+48

pw::multibuf_impl::operator!=()

NEW

+46

_ZNSt3__25equalB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEEPKSt4byteEEbT_S8_T0_S9_

NEW

+44

pw::multibuf::size_report::Receiver<>::Receiver<>()

NEW

+44

pw::multibuf_impl::ChunkIterator<>::operator=()

NEW

+44

pw::multibuf_impl::GenericMultiBuf::operator=()

NEW

+42

pw::BasicMultiBuf<>::PushBack<>()

NEW

+42

pw::multibuf_impl::ByteIterator<>::ByteIterator()

NEW

+42

pw::multibuf_impl::GenericMultiBuf::GetView()

NEW

+40

__atomic_fetch_sub_4

NEW

+40

pw::Result<>::value()

NEW

+40

pw::allocator::Layout::Of<>()

NEW

+38

pw::multibuf_impl::GenericMultiBuf::size()

NEW

+36

pw::allocator::internal::ControlBlock::DecrementShared()

NEW

+36

pw::multibuf::size_report::Receiver<>::~Receiver()

NEW

+36

pw::multibuf_impl::GenericMultiBuf::GenericMultiBuf()

NEW

+36

pw::multibuf_impl::GenericMultiBuf::GetLength()

NEW

+36

pw::multibuf_impl::GenericMultiBuf::GetOffset()

NEW

+36

pw::multibuf_impl::GenericMultiBuf::IsSealed()

NEW

+34

_ZNSt3__28distanceB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEEEENS_15iterator_traitsIT_E15difference_typeES6_S6_

NEW

+34

pw::UniquePtr<>::Reset()

NEW

+34

pw::multibuf_impl::GenericMultiBuf::IsBoundary()

NEW

+32

pw::BasicMultiBuf<>::Insert<>()

NEW

+32

pw::allocator::ChunkPool

NEW

+32

pw::allocator::Pool

NEW

+32

pw::multibuf_impl::ByteIterator<>::operator*()

NEW

+28

pw::DynamicDeque<>::~DynamicDeque()

NEW

+28

pw::containers::internal::GenericDeque<>::CheckCapacityAdd()

NEW

+28

pw::containers::internal::GenericDequeBase<>::MoveAssignIndices()

NEW

+28

pw::multibuf_impl::ByteIterator<>::operator ?<>()

NEW

+26

_ZNSt3__213__unwrap_iterB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEENS_18__unwrap_iter_implIS4_Lb0EEETnNS_9enable_ifIXsr21is_copy_constructibleIT_EE5valueEiE4typeELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIS8_EEEES8_

NEW

+24

__aeabi_uidivmod

NEW

+24

pw::multibuf::size_report::FrameHandlerV2::DoPushBack()

NEW

+24

pw::multibuf::size_report::FrameHandlerV2::DoTruncate()

NEW

+24

pw::multibuf_impl::GenericMultiBuf::ClearMemoryContext()

NEW

+22

_ZN2pw9allocator4Pool10MakeUniqueIA_St4byteTpTnRiJETnNSt3__29enable_ifIX20is_unbounded_array_vIT_EEiE4typeELi0EEENS_9UniquePtrIS8_EEv

NEW

+20

_ZNSt3__27destroyB8nn210000IN2pw10containers8internal13DequeIteratorINS3_20BasicInlineDequeImplINS1_13multibuf_impl8InstanceINS1_13BasicMultiBufIJLNS1_16MultiBufPropertyE2EEEEEENS3_21AsyncCountAndCapacityItLj1EEELj4294967295EEEEEEEvT_SG_

NEW

+20

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

NEW

+20

pw::multibuf::size_report::FrameHandlerV2::GetBegin()

NEW

+20

pw::multibuf::size_report::FrameHandlerV2::GetEnd()

NEW

+20

pw::multibuf_impl::ByteIterator<>::operator++()

NEW

+20

pw::multibuf_impl::operator<()

NEW

+18

pw::DynamicDeque<>::try_reserve_exact()

NEW

+18

pw::containers::internal::GenericDequeBase<>::ClearIndices()

NEW

+16

__aeabi_idivmod

NEW

+16

pw::multibuf_impl::GenericMultiBuf::IsOwned()

NEW

+16

pw::multibuf_impl::GenericMultiBuf::IsShared()

NEW

+16

pw::multibuf_impl::GenericMultiBuf::~GenericMultiBuf()

NEW

+14

_ZNSt3__224__optional_destruct_baseIN2pw13multibuf_impl8InstanceINS1_13BasicMultiBufIJLNS1_16MultiBufPropertyE2EEEEEELb0EED2B8nn210000Ev

NEW

+14

pw::allocator::ChunkPool::DoAllocate()

NEW

+14

pw::allocator::internal::BaseManagedPtr::Deallocate()

NEW

+14

pw::multibuf_impl::ChunkIterator<>::operator ?<>()

NEW

+12

_ZNSt3__28optionalIN2pw13multibuf_impl8InstanceINS1_13BasicMultiBufIJLNS1_16MultiBufPropertyE2EEEEEEEC2B8nn210000IS7_TnNS_9enable_ifIXclsr22_CheckOptionalArgsCtorIT_EE17__enable_implicitISB_EEEiE4typeELi0EEEOSB_

NEW

+12

pw::allocator::ChunkPool::DoDeallocate()

NEW

+12

pw::allocator::internal::BaseManagedPtr::HasCapability()

NEW

+12

pw::multibuf_impl::GenericMultiBuf::CopyTo()

NEW

+10

pw::allocator::ChunkPool::~ChunkPool()

NEW

+10

pw::multibuf_impl::GenericMultiBuf::GetData()

NEW

+8

pw::multibuf::size_report::FrameHandlerV2::kLayout

NEW

+8

pw::multibuf::size_report::FrameHandlerV2::~FrameHandlerV2()

NEW

+2

pw::Deallocator::~Deallocator()

NEW

+2

pw::allocator::Pool::~Pool()

+10,480

RAM

NEW

+1,024

pw::multibuf::size_report::metadata_region

+1,024

Cost of using MultiBuf v2 vs. v1

FLASH

+1,060

[section .rodata]

DEL

-448

pw::multibuf::size_report::ReceiverV1

DEL

-448

pw::multibuf::size_report::SenderV1

DEL

-348

pw::multibuf::SimpleAllocator::DoAllocate()

DEL

-216

pw::multibuf::SimpleAllocator::DoAllocate()::$_0::operator()()

DEL

-172

pw::multibuf::SimpleAllocator::InternalAllocateContiguous()::$_0::operator()()

+4

pw::multibuf::size_report::TransferMessage<>()

-16

pw::multibuf::size_report::TransferMessage()

DEL

-162

pw::multibuf::MultiBuf::CopyFromAndOptionallyTruncate()

+12

pw::multibuf::size_report::FrameHandler<>::CalculateChecksum()

DEL

-128

pw::multibuf::SimpleAllocator::InternalAllocateContiguous()

+2

pw::multibuf::size_report::Receiver<>::DoPend()

DEL

-116

pw::multibuf::SimpleAllocator::SimpleAllocator()

+44

pw::containers::internal::GenericDeque<>::pop_front()

DEL

-112

pw::multibuf::SimpleAllocator::InsertRegion()

+2

pw::multibuf::size_report::Receiver<>::HandleDemoLinkFrame()

DEL

-106

pw::multibuf::Chunk::ClaimPrefix()

DEL

-106

pw::multibuf::MultiBuf::CopyTo()

DEL

-104

pw::multibuf::Chunk::Slice()

DEL

-102

pw::multibuf::Chunk::ClaimSuffix()

DEL

-98

pw::multibuf::size_report::ReceiverV1::~ReceiverV1()

DEL

-96

pw::multibuf::MultiBuf::DiscardPrefix()

DEL

-92

pw::multibuf::size_report::FrameHandlerV1::DoWiden()

+4

pw::multibuf::size_report::Sender<>::DoPend()

DEL

-90

pw::multibuf::MultiBufAllocator::MoreMemoryAvailable()

DEL

-90

pw::multibuf::SimpleAllocator::GetAvailableMemorySize()

DEL

-90

pw::multibuf::size_report::SenderV1::~SenderV1()

+44

pw::containers::internal::GenericDeque<>::front()

+60

pw::containers::internal::GenericDeque<>::try_emplace_back<>()

DEL

-84

pw::multibuf::MultiBuf::const_iterator::operator+=()

DEL

-84

pw::multibuf::size_report::SenderV1::SenderV1()

DEL

-80

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

-40

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

DEL

-80

pw::multibuf::MultiBuf::TruncateAfter()

DEL

-80

pw::multibuf::size_report::FrameHandlerV1::DoAllocateFrame()

-18

pw::containers::internal::LegacyIntrusiveList<>::Item::~Item()

DEL

-70

pw::multibuf::ChunkRegionTracker::CreateFirstChunk()

DEL

-70

pw::multibuf::internal::LinkedRegionTracker::~LinkedRegionTracker()

DEL

-68

_ZNSt3__212__equal_implB8nn210000IN2pw8multibuf8MultiBuf8iteratorES4_PKSt4byteS7_NS_10__equal_toENS_10__identityES9_EEbT_T0_T1_T2_RT3_RT4_RT5_

DEL

-66

pw::multibuf::internal::LinkedRegionTracker::Destroy()

-16

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

DEL

-64

pw::multibuf::Chunk::Free()

DEL

-62

pw::multibuf::MultiBufAllocator::AllocateContiguous()

DEL

-58

_ZNSt3__29__destroyB8nn210000IN2pw10containers8internal13DequeIteratorINS3_20BasicInlineDequeImplINS1_8multibuf8MultiBufENS3_21AsyncCountAndCapacityItLj1EEELj4294967295EEEEEEET_SC_SC_

DEL

-54

pw::multibuf::SimpleAllocator::~SimpleAllocator()

DEL

-52

pw::multibuf::MultiBuf::Truncate()

DEL

-52

pw::multibuf::MultiBufChunks::push_front()

DEL

-52

pw::multibuf::MultiBufChunks::take_front()

+44

pw::containers::internal::GenericDeque<>::EmplaceBackUnchecked<>()

DEL

-48

pw::internal_result::StatusOrData<>::AssignStatus<>()

DEL

-44

pw::multibuf::size_report::FrameHandlerV1::DoNarrow()

DEL

-40

_ZN2pw15internal_result12StatusOrDataINS_8multibuf10OwnedChunkELb0EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

DEL

-40

_ZN2pw15internal_result12StatusOrDataINS_8multibuf8MultiBufELb0EEC2INS_6StatusETnNSt3__29enable_ifIXsr3std16is_constructibleIS6_OT_EE5valueEiE4typeELi0EEESA_

DEL

-40

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

DEL

-40

pw::internal_result::StatusOrData<>::~StatusOrData()

DEL

-40

pw::multibuf::MultiBuf::const_iterator::operator++()

DEL

-38

pw::multibuf::MultiBufAllocator::~MultiBufAllocator()

+10

pw::multibuf::size_report::Receiver<>::TakeReceived()

DEL

-36

pw::Deallocator::DeleteArray<>()

DEL

-36

pw::multibuf::internal::LinkedRegionTracker::LinkedRegionTracker()

DEL

-34

_ZNSt3__25equalB8nn210000IN2pw8multibuf8MultiBuf8iteratorEPKSt4byteNS_10__equal_toEEEbT_S9_T0_SA_T1_

DEL

-34

pw::internal_result::StatusOrData<>::operator=()

+2

pw::Allocator::Reallocate()

+2

pw::checksum::Crc32Impl<>::Update()

DEL

-32

pw::multibuf::ChunkRegionTracker

DEL

-32

pw::multibuf::MultiBuf::begin()

DEL

-32

pw::multibuf::MultiBufAllocator::MultiBufAllocator()

DEL

-32

pw::multibuf::internal::LinkedRegionTracker

DEL

-30

_ZN2pw9Allocator3NewINS_8multibuf8internal19LinkedRegionTrackerETpTnRiJEJRNS2_15SimpleAllocatorERKNS_4spanISt4byteLj4294967295EEEEEENSt3__29enable_ifIXntsr3stdE10is_array_vIT_EEPSF_E4typeEDpOT1_

DEL

-30

pw::internal_result::StatusOrData<>::Assign<>()

+2

pw::metric::Group::Group()

DEL

-28

pw::multibuf::ChunkRegionTracker::~ChunkRegionTracker()

DEL

-28

pw::multibuf::MultiBufChunks::PushSuffix()

-2

pw::Allocator::Resize()

DEL

-26

pw::multibuf::MultiBuf::ClaimSuffix()

DEL

-24

pw::multibuf::Chunk::RemoveFromRegionList()

DEL

-24

pw::multibuf::ChunkRegionTracker::ChunkRegionTracker()

DEL

-24

pw::multibuf::MultiBufAllocator

DEL

-24

pw::multibuf::SimpleAllocator

DEL

-24

pw::multibuf::size_report::FrameHandlerV1::DoPushBack()

DEL

-24

pw::multibuf::size_report::FrameHandlerV1::DoTruncate()

DEL

-22

pw::multibuf::MultiBuf::empty()

DEL

-22

pw::multibuf::MultiBufChunks::Release()

DEL

-22

pw::multibuf::MultiBufChunks::operator=()

DEL

-22

pw::multibuf::internal::LinkedRegionTracker::DeallocateChunkClass()

DEL

-20

_ZNSt3__224__optional_destruct_baseIN2pw8multibuf10OwnedChunkELb0EED2B8nn210000Ev

DEL

-20

_ZNSt3__224__optional_destruct_baseIN2pw8multibuf8MultiBufELb0EED2B8nn210000Ev

DEL

-20

_ZNSt3__27destroyB8nn210000IN2pw10containers8internal13DequeIteratorINS3_20BasicInlineDequeImplINS1_8multibuf8MultiBufENS3_21AsyncCountAndCapacityItLj1EEELj4294967295EEEEEEEvT_SC_

DEL

-20

_ZNSt3__29destroy_nB8nn210000IPN2pw8multibuf8internal19LinkedRegionTrackerEjEET_S6_T0_

DEL

-20

pw::multibuf::MultiBuf::const_iterator::AdvanceToData()

DEL

-20

pw::multibuf::MultiBufChunks::size_bytes()

DEL

-20

pw::multibuf::OwnedChunk::Release()

DEL

-20

pw::multibuf::internal::LinkedRegionTracker::AllocateChunkClass()

DEL

-20

pw::multibuf::size_report::FrameHandlerV1::GetBegin()

DEL

-18

_ZNSt3__25equalB8nn210000IN2pw8multibuf8MultiBuf8iteratorEPKSt4byteEEbT_S8_T0_S9_

-2

pw::async2::Dispatcher::~Dispatcher()

DEL

-18

pw::internal_result::StatusOrData<>::Clear()

DEL

-18

pw::multibuf::MultiBuf::ClaimPrefix()

DEL

-16

pw::multibuf::MultiBuf::const_iterator::end()

DEL

-16

pw::multibuf::size_report::FrameHandlerV1::GetEnd()

-8

vClearInterruptMaskFromISR

DEL

-14

pw::multibuf::MultiBuf::iterator::end()

DEL

-14

pw::multibuf::SimpleAllocator::DoGetBackingCapacity()

+4

__bi_84

DEL

-12

pw::multibuf::Chunk::Truncate()

DEL

-12

pw::multibuf::MultiBuf::CopyFrom()

DEL

-12

pw::multibuf::MultiBufChunks::back()

DEL

-10

_ZN2pw11Deallocator6DeleteINS_8multibuf8internal19LinkedRegionTrackerETpTnRiJETnNSt3__29enable_ifIXntsr3stdE10is_array_vIT_EEiE4typeELi0EEEvPS8_

+2

_ZNSt3__213__atomic_baseIjLb0EE21compare_exchange_weakB8nn210000ERjjNS_12memory_orderE

+28

pw::Deallocator::DoDeallocate()

DEL

-10

pw::multibuf::Chunk::DiscardPrefix()

DEL

-10

pw::multibuf::internal::LinkedRegionTracker::Region()

DEL

-8

pw::multibuf::size_report::FrameHandlerV1::~FrameHandlerV1()

NEW

+584

pw::multibuf_impl::GenericMultiBuf::Insert()

NEW

+448

pw::multibuf::size_report::ReceiverV2

NEW

+448

pw::multibuf::size_report::SenderV2

NEW

+296

pw::multibuf_impl::GenericMultiBuf::TryReserveForInsert()

NEW

+268

pw::multibuf_impl::GenericMultiBuf::PopLayer()

NEW

+258

pw::multibuf_impl::ChunkIterator<>::ResetCurrent()

NEW

+256

pw::multibuf_impl::ChunkIterator<>::operator–()

NEW

+232

pw::multibuf_impl::GenericMultiBuf::Clear()

NEW

+224

pw::multibuf_impl::GenericMultiBuf::InsertEntries()

NEW

+216

pw::multibuf_impl::ChunkIterator<>::operator++()

NEW

+216

pw::multibuf_impl::GenericMultiBuf::AddLayer()

NEW

+188

pw::multibuf_impl::GenericMultiBuf::TruncateTopLayer()

NEW

+176

pw::multibuf_impl::ChunkIterator<>::operator->()

NEW

+176

pw::multibuf_impl::operator-()

NEW

+172

pw::multibuf_impl::GenericMultiBuf::SetLayer()

NEW

+144

pw::multibuf_impl::GenericMultiBuf::SplitBase()

NEW

+140

pw::allocator::ChunkPool::ChunkPool()

NEW

+136

pw::multibuf_impl::GenericMultiBuf::TryReserveEntries()

NEW

+132

pw::DynamicDeque<>::ReallocateBuffer()

NEW

+128

_ZNSt3__25equalB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEEPKSt4byteNS_10__equal_toEEEbT_S9_T0_SA_T1_

NEW

+128

pw::multibuf_impl::ByteIterator<>::operator+=()

NEW

+128

pw::multibuf_impl::GenericMultiBuf::SplitAfter()

NEW

+128

pw::multibuf_impl::GenericMultiBuf::SplitBefore()

NEW

+124

pw::multibuf::size_report::FrameHandlerV2::DoAllocateFrame()

NEW

+120

pw::multibuf_impl::ByteIterator<>::operator-=()

NEW

+112

pw::allocator::ChunkPool::DoGetInfo()

NEW

+112

pw::containers::internal::GenericDeque<>::operator[]()

NEW

+112

pw::multibuf_impl::GenericMultiBuf::IsCompatible()

NEW

+100

pw::multibuf_impl::GenericMultiBuf::CopyToImpl()

NEW

+98

pw::multibuf::size_report::ReceiverV2::~ReceiverV2()

NEW

+98

pw::multibuf_impl::GenericMultiBuf::CopyFrom()

NEW

+96

pw::multibuf::size_report::ReceiverV2::ReceiverV2()

NEW

+96

pw::multibuf::size_report::SenderV2::SenderV2()

NEW

+92

pw::multibuf::size_report::SenderV2::~SenderV2()

NEW

+92

pw::multibuf_impl::ByteIterator<>::Compare()

NEW

+92

pw::multibuf_impl::GenericMultiBuf::CheckRange()

NEW

+92

pw::multibuf_impl::GenericMultiBuf::UnsealTopLayer()

NEW

+88

pw::multibuf_impl::ChunkIterator<>::data()

NEW

+88

pw::multibuf_impl::ChunkIterator<>::operator*()

NEW

+88

pw::multibuf_impl::GenericMultiBuf::GetIndexAndOffset()

NEW

+84

pw::multibuf_impl::operator==()

NEW

+80

pw::containers::internal::GenericDeque<>::contiguous_data()

NEW

+80

pw::containers::internal::GenericDeque<>::push_back()

NEW

+74

pw::DynamicDeque<>::try_reserve()

NEW

+74

pw::multibuf_impl::ChunkIterator<>::ChunkIterator()

NEW

+72

_ZNSt3__212__equal_implB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEES4_PKSt4byteS7_NS_10__equal_toENS_10__identityES9_EEbT_T0_T1_T2_RT3_RT4_RT5_

NEW

+72

pw::allocator::Pool::NewArray<>()

NEW

+68

pw::DynamicDeque<>::IncreaseCapacity()

NEW

+64

pw::BasicMultiBuf<>::PushBack()

NEW

+60

pw::containers::internal::GenericDeque<>::back()

NEW

+60

pw::multibuf::size_report::FrameHandlerV2::DoNarrow()

NEW

+60

pw::multibuf_impl::GenericMultiBuf::cend()

NEW

+60

pw::multibuf_impl::GenericMultiBuf::end()

NEW

+58

_ZNSt3__29__destroyB8nn210000IN2pw10containers8internal13DequeIteratorINS3_20BasicInlineDequeImplINS1_13multibuf_impl8InstanceINS1_13BasicMultiBufIJLNS1_16MultiBufPropertyE2EEEEEENS3_21AsyncCountAndCapacityItLj1EEELj4294967295EEEEEEET_SG_SG_

NEW

+58

pw::BasicMultiBuf<>::Insert()

NEW

+58

pw::multibuf_impl::GenericMultiBuf::begin()

NEW

+58

pw::multibuf_impl::GenericMultiBuf::cbegin()

NEW

+56

pw::multibuf_impl::ChunkIterator<>::size()

NEW

+56

pw::multibuf_impl::GenericMultiBuf::FindShared()

NEW

+56

pw::multibuf_impl::GenericMultiBuf::GetDeallocator()

NEW

+54

pw::multibuf_impl::GenericMultiBuf::IsTopLayerSealed()

NEW

+52

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

NEW

+52

pw::multibuf_impl::GenericMultiBuf::GetControlBlock()

NEW

+50

pw::multibuf::size_report::FrameHandlerV2::DoWiden()

NEW

+48

pw::DynamicDeque<>::operator=()

NEW

+48

pw::multibuf_impl::GenericMultiBuf::NumFragments()

NEW

+48

pw::multibuf_impl::operator!=()

NEW

+46

_ZNSt3__25equalB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEEPKSt4byteEEbT_S8_T0_S9_

NEW

+44

pw::multibuf::size_report::Receiver<>::Receiver<>()

NEW

+44

pw::multibuf_impl::ChunkIterator<>::operator=()

NEW

+44

pw::multibuf_impl::GenericMultiBuf::operator=()

NEW

+42

pw::BasicMultiBuf<>::PushBack<>()

NEW

+42

pw::multibuf_impl::ByteIterator<>::ByteIterator()

NEW

+42

pw::multibuf_impl::GenericMultiBuf::GetView()

NEW

+40

__atomic_fetch_sub_4

NEW

+40

pw::allocator::Layout::Of<>()

NEW

+38

pw::multibuf_impl::GenericMultiBuf::size()

NEW

+36

pw::allocator::internal::ControlBlock::DecrementShared()

NEW

+36

pw::multibuf_impl::GenericMultiBuf::GenericMultiBuf()

NEW

+36

pw::multibuf_impl::GenericMultiBuf::GetLength()

NEW

+36

pw::multibuf_impl::GenericMultiBuf::GetOffset()

NEW

+36

pw::multibuf_impl::GenericMultiBuf::IsSealed()

NEW

+34

_ZNSt3__28distanceB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEEEENS_15iterator_traitsIT_E15difference_typeES6_S6_

NEW

+34

pw::UniquePtr<>::Reset()

NEW

+34

pw::multibuf_impl::GenericMultiBuf::IsBoundary()

NEW

+32

pw::BasicMultiBuf<>::Insert<>()

NEW

+32

pw::allocator::ChunkPool

NEW

+32

pw::allocator::Pool

NEW

+32

pw::multibuf_impl::ByteIterator<>::operator*()

NEW

+28

pw::DynamicDeque<>::~DynamicDeque()

NEW

+28

pw::containers::internal::GenericDeque<>::CheckCapacityAdd()

NEW

+28

pw::containers::internal::GenericDequeBase<>::MoveAssignIndices()

NEW

+28

pw::multibuf_impl::ByteIterator<>::operator ?<>()

NEW

+26

_ZNSt3__213__unwrap_iterB8nn210000IN2pw13multibuf_impl12ByteIteratorItLb0EEENS_18__unwrap_iter_implIS4_Lb0EEETnNS_9enable_ifIXsr21is_copy_constructibleIT_EE5valueEiE4typeELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIS8_EEEES8_

NEW

+24

pw::multibuf::size_report::FrameHandlerV2::DoPushBack()

NEW

+24

pw::multibuf::size_report::FrameHandlerV2::DoTruncate()

NEW

+24

pw::multibuf_impl::GenericMultiBuf::ClearMemoryContext()

NEW

+22

_ZN2pw9allocator4Pool10MakeUniqueIA_St4byteTpTnRiJETnNSt3__29enable_ifIX20is_unbounded_array_vIT_EEiE4typeELi0EEENS_9UniquePtrIS8_EEv

NEW

+20

_ZNSt3__27destroyB8nn210000IN2pw10containers8internal13DequeIteratorINS3_20BasicInlineDequeImplINS1_13multibuf_impl8InstanceINS1_13BasicMultiBufIJLNS1_16MultiBufPropertyE2EEEEEENS3_21AsyncCountAndCapacityItLj1EEELj4294967295EEEEEEEvT_SG_

NEW

+20

pw::multibuf::size_report::FrameHandlerV2::GetBegin()

NEW

+20

pw::multibuf::size_report::FrameHandlerV2::GetEnd()

NEW

+20

pw::multibuf_impl::ByteIterator<>::operator++()

NEW

+20

pw::multibuf_impl::operator<()

NEW

+18

pw::DynamicDeque<>::try_reserve_exact()

NEW

+16

__aeabi_idivmod

NEW

+16

pw::multibuf_impl::GenericMultiBuf::IsOwned()

NEW

+16

pw::multibuf_impl::GenericMultiBuf::IsShared()

NEW

+16

pw::multibuf_impl::GenericMultiBuf::~GenericMultiBuf()

NEW

+14

_ZNSt3__224__optional_destruct_baseIN2pw13multibuf_impl8InstanceINS1_13BasicMultiBufIJLNS1_16MultiBufPropertyE2EEEEEELb0EED2B8nn210000Ev

NEW

+14

pw::allocator::ChunkPool::DoAllocate()

NEW

+14

pw::allocator::internal::BaseManagedPtr::Deallocate()

NEW

+14

pw::multibuf_impl::ChunkIterator<>::operator ?<>()

NEW

+12

_ZNSt3__28optionalIN2pw13multibuf_impl8InstanceINS1_13BasicMultiBufIJLNS1_16MultiBufPropertyE2EEEEEEEC2B8nn210000IS7_TnNS_9enable_ifIXclsr22_CheckOptionalArgsCtorIT_EE17__enable_implicitISB_EEEiE4typeELi0EEEOSB_

NEW

+12

pw::allocator::ChunkPool::DoDeallocate()

NEW

+12

pw::allocator::internal::BaseManagedPtr::HasCapability()

NEW

+12

pw::multibuf_impl::GenericMultiBuf::CopyTo()

NEW

+10

pw::allocator::ChunkPool::~ChunkPool()

NEW

+10

pw::multibuf_impl::GenericMultiBuf::GetData()

NEW

+8

pw::multibuf::size_report::FrameHandlerV2::kLayout

NEW

+8

pw::multibuf::size_report::FrameHandlerV2::~FrameHandlerV2()

NEW

+2

pw::Deallocator::~Deallocator()

NEW

+2

pw::allocator::Pool::~Pool()

+5,656