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

+364

[section .rodata]

DEL

-424

pw::multibuf::size_report::SenderV0

-4

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

-4

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

+36

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

DEL

-156

pw::multibuf::size_report::ReceiverV0

-12

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

-18

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

+4

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

DEL

-104

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

-4

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

+12

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

DEL

-96

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

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

+84

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

DEL

-76

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

-4

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

DEL

-60

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

+2

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

DEL

-50

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

DEL

-42

_ZNSt3__212__equal_implB9nqn220000IPSt4byteS2_PKS1_S4_NS_10__equal_toENS_10__identityES6_EEbT_T0_T1_T2_RT3_RT4_RT5_

DEL

-40

_ZNSt3__25equalB9nqn220000INS_11__wrap_iterIPSt4byteEENS1_IPKS2_EENS_10__equal_toEEEbT_S9_T0_SA_T1_

+40

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

+16

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

DEL

-40

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

+36

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

DEL

-36

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

DEL

-28

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

+2

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

+16

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

+18

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

+16

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

DEL

-16

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

-2

pw::async2::BasicDispatcher::DoWaitForWake()

-4

vClearInterruptMaskFromISR

+4

operator delete()

DEL

-8

_ZNSt3__25equalB9nqn220000INS_11__wrap_iterIPSt4byteEENS1_IPKS2_EEEEbT_S8_T0_S9_

DEL

-8

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

DEL

-8

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

NEW

+424

pw::multibuf::size_report::ReceiverV1

NEW

+424

pw::multibuf::size_report::SenderV1

NEW

+372

xQueueSemaphoreTake

NEW

+348

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

NEW

+216

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

NEW

+172

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

NEW

+168

vTaskPriorityDisinheritAfterTimeout

NEW

+162

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

NEW

+140

xTaskPriorityInherit

NEW

+128

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

NEW

+120

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

+96

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

NEW

+92

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

NEW

+92

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

NEW

+90

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

NEW

+90

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

NEW

+84

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

NEW

+80

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

NEW

+80

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

NEW

+80

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

NEW

+72

vQueueUnregisterQueue

NEW

+70

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

NEW

+70

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

NEW

+68

_ZNSt3__212__equal_implB9nqn220000IN2pw8multibuf8MultiBuf8iteratorES4_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

+60

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

NEW

+60

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

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

+40

vQueueDelete

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__25equalB9nqn220000IN2pw8multibuf8MultiBuf8iteratorENS_11__wrap_iterIPKSt4byteEENS_10__equal_toEEEbT_SB_T0_SC_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_15SimpleAllocatorERKNSt3__24spanISt4byteLj4294967295EEEEEENS8_9enable_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

_ZNSt3__29__destroyB9nqn220000INS_11__wrap_iterIPN2pw8multibuf8MultiBufEEEEET_S7_S7_

NEW

+24

__aeabi_uidivmod

NEW

+24

prvIsQueueEmpty

NEW

+24

pvTaskIncrementMutexHeldCount

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_baseIN2pw8multibuf10OwnedChunkELb0EED2B9nqn220000Ev

NEW

+20

_ZNSt3__224__optional_destruct_baseIN2pw8multibuf8MultiBufELb0EED2B9nqn220000Ev

NEW

+20

_ZNSt3__29destroy_nB9nqn220000IPN2pw8multibuf8internal19LinkedRegionTrackerEjEET_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__25equalB9nqn220000IN2pw8multibuf8MultiBuf8iteratorENS_11__wrap_iterIPKSt4byteEEEEbT_SA_T0_SB_

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::MultiBuf::iterator::end()

NEW

+16

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

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_ifIXnt10is_array_vIT_EEiE4typeELi0EEEvPS8_

NEW

+10

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

NEW

+10

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

NEW

+8

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

+5,872

RAM

NEW

+1,024

pw::multibuf::size_report::metadata_region

NEW

+80

xQueueRegistry

+1,104

Cost of using MultiBuf v2 vs. a fake implementation

FLASH

+1,256

[section .rodata]

DEL

-424

pw::multibuf::size_report::SenderV0

-28

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

-4

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

+36

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

DEL

-156

pw::multibuf::size_report::ReceiverV0

-12

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

-18

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

+6

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

DEL

-104

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

-4

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

+56

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

DEL

-96

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

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

+168

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

+60

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

DEL

-76

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

-4

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

DEL

-60

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

+46

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

DEL

-50

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

DEL

-42

_ZNSt3__212__equal_implB9nqn220000IPSt4byteS2_PKS1_S4_NS_10__equal_toENS_10__identityES6_EEbT_T0_T1_T2_RT3_RT4_RT5_

DEL

-40

_ZNSt3__25equalB9nqn220000INS_11__wrap_iterIPSt4byteEENS1_IPKS2_EENS_10__equal_toEEEbT_S9_T0_SA_T1_

+16

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

DEL

-40

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

+38

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

+2

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

DEL

-36

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

+2

pw::Allocator::Reallocate()

DEL

-28

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

-2

pw::Allocator::Resize()

+14

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

+16

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

-4

__bi_84

DEL

-16

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

-2

pw::async2::BasicDispatcher::DoWaitForWake()

+12

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

+8

vClearInterruptMaskFromISR

+4

operator delete()

+28

pw::Deallocator::DoDeallocate()

DEL

-8

_ZNSt3__25equalB9nqn220000INS_11__wrap_iterIPSt4byteEENS1_IPKS2_EEEEbT_S8_T0_S9_

DEL

-8

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

DEL

-8

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

NEW

+612

pw::multibuf::internal::GenericMultiBuf::Insert()

NEW

+424

pw::multibuf::size_report::ReceiverV2

NEW

+424

pw::multibuf::size_report::SenderV2

NEW

+312

pw::multibuf::internal::ChunkIterator<>::ResetCurrent()

NEW

+264

pw::multibuf::internal::GenericMultiBuf::PopLayer()

NEW

+238

_ZNSt3__234__cxx_atomic_compare_exchange_weakB9nqn220000IjEEbPNS_22__cxx_atomic_base_implIT_EEPS2_S2_NS_12memory_orderES6_

NEW

+232

pw::multibuf::internal::ChunkIterator<>::operator–()

NEW

+224

pw::multibuf::internal::ChunkIterator<>::operator++()

NEW

+224

pw::multibuf::internal::GenericMultiBuf::InsertChunks()

NEW

+218

pw::multibuf::internal::GenericMultiBuf::AddLayer()

NEW

+216

pw::multibuf::internal::GenericMultiBuf::TryReserveForInsert()

NEW

+212

pw::multibuf::internal::GenericMultiBuf::ClearRange()

NEW

+212

pw::multibuf::internal::GenericMultiBuf::EraseRange()

NEW

+192

pw::multibuf::internal::GenericMultiBuf::SplitAfter()

NEW

+188

pw::multibuf::internal::GenericMultiBuf::TruncateTopLayer()

NEW

+176

pw::multibuf::internal::ChunkIterator<>::operator->()

NEW

+176

pw::multibuf::internal::operator-()

NEW

+172

pw::multibuf::internal::GenericMultiBuf::SetLayer()

NEW

+156

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

NEW

+156

pw::multibuf::internal::GenericMultiBuf::SplitBase()

NEW

+144

pw::multibuf::internal::GenericMultiBuf::SplitBefore()

NEW

+140

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

NEW

+132

pw::DynamicDeque<>::ReallocateBuffer()

NEW

+128

_ZNSt3__25equalB9nqn220000IN2pw8multibuf8internal12ByteIteratorItLNS3_15ChunkMutabilityE0EEENS_11__wrap_iterIPKSt4byteEENS_10__equal_toEEEbT_SD_T0_SE_T1_

NEW

+128

pw::multibuf::internal::ByteIterator<>::operator+=()

NEW

+128

pw::multibuf::internal::GenericMultiBuf::CheckRange()

NEW

+120

pw::multibuf::internal::ByteIterator<>::operator-=()

NEW

+120

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

NEW

+116

pw::multibuf::internal::GenericMultiBuf::TryConvertToShared()

NEW

+112

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

NEW

+112

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

NEW

+104

pw::multibuf::internal::ChunkIterator<>::data()

NEW

+104

pw::multibuf::internal::GenericMultiBuf::CopyToImpl()

NEW

+104

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

NEW

+102

pw::multibuf::internal::GenericMultiBuf::CopyFrom()

NEW

+100

_ZNKSt3__211__move_implINS_17_ClassicAlgPolicyEEclB9nqn220000IN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeINS4_8multibuf8internal5EntryEtEEEESD_SD_EENS_4pairIT_T1_EESF_T0_SG_

NEW

+100

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

NEW

+98

_ZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000IN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeINS4_8multibuf8internal5EntryEtEEEESD_SD_EENS_4pairIT_T1_EESF_T0_SG_

NEW

+98

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

NEW

+92

pw::multibuf::internal::ByteIterator<>::Compare()

NEW

+92

pw::multibuf::internal::GenericMultiBuf::GetChunkAndOffset()

NEW

+90

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

NEW

+88

pw::allocator::internal::ControlBlock::IncrementShared()

NEW

+88

pw::multibuf::internal::ChunkIterator<>::operator*()

NEW

+84

pw::multibuf::internal::ChunksImpl<>::ChunksImpl()

NEW

+84

pw::multibuf::internal::GenericMultiBuf::TryReserveEntries()

NEW

+84

pw::multibuf::internal::operator==()

NEW

+82

pw::multibuf::internal::ChunkIterator<>::ChunkIterator()

NEW

+80

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

NEW

+74

pw::DynamicDeque<>::try_reserve()

NEW

+72

_ZNSt3__212__equal_implB9nqn220000IN2pw8multibuf8internal12ByteIteratorItLNS3_15ChunkMutabilityE0EEES6_PKSt4byteS9_NS_10__equal_toENS_10__identityESB_EEbT_T0_T1_T2_RT3_RT4_RT5_

NEW

+72

pw::SharedPtr<>::reset()

NEW

+72

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

NEW

+72

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

NEW

+68

__atomic_compare_exchange_4

NEW

+68

pw::DynamicDeque<>::IncreaseCapacity()

NEW

+68

pw::multibuf::internal::GenericMultiBuf::Clear()

NEW

+66

pw::multibuf::internal::ChunkIterator<>::is_valid()

NEW

+64

pw::BasicMultiBuf<>::PushBack()

NEW

+64

pw::multibuf::internal::ChunkIterator<>::size()

NEW

+62

pw::multibuf::internal::GenericMultiBuf::IsTopLayerSealed()

NEW

+60

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

NEW

+60

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

NEW

+58

pw::BasicMultiBuf<>::Insert()

NEW

+56

pw::multibuf::internal::GenericMultiBuf::GetRelativeOffset()

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__move_implINS_17_ClassicAlgPolicyEEEN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeINS4_8multibuf8internal5EntryEtEEEESD_SD_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISF_SG_EESF_T1_SG_

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_20__move_backward_implINS_17_ClassicAlgPolicyEEEN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeINS4_8multibuf8internal5EntryEtEEEESD_SD_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISF_SG_EESF_T1_SG_

NEW

+52

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

NEW

+52

pw::allocator::internal::ControlBlock::Create()

NEW

+52

pw::multibuf::internal::GenericMultiBuf::NumFragments()

NEW

+52

pw::multibuf::internal::operator!=()

NEW

+50

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

NEW

+48

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

NEW

+46

_ZNSt3__25equalB9nqn220000IN2pw8multibuf8internal12ByteIteratorItLNS3_15ChunkMutabilityE0EEENS_11__wrap_iterIPKSt4byteEEEEbT_SC_T0_SD_

NEW

+46

pw::multibuf::internal::GenericMultiBuf::GetView()

NEW

+44

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

NEW

+44

pw::multibuf::internal::ChunkIterator<>::operator=()

NEW

+44

pw::multibuf::internal::GenericMultiBuf::GetOffset()

NEW

+42

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

NEW

+42

pw::UniquePtr<>::Reset()

NEW

+40

__atomic_fetch_sub_4

NEW

+40

pw::Result<>::value()

NEW

+40

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

NEW

+40

pw::multibuf::internal::GenericMultiBuf::GetLength()

NEW

+38

pw::multibuf::internal::GenericMultiBuf::IsSealed()

NEW

+38

pw::multibuf::internal::GenericMultiBuf::size()

NEW

+38

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

NEW

+36

_ZNSt3__213move_backwardB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeINS1_8multibuf8internal5EntryEtEEEESA_EET0_T_SC_SB_

NEW

+36

_ZNSt3__24moveB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeINS1_8multibuf8internal5EntryEtEEEESA_EET0_T_SC_SB_

NEW

+36

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

NEW

+36

pw::multibuf::internal::GenericMultiBuf::IsBoundary()

NEW

+36

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

NEW

+34

_ZNSt3__28distanceB9nqn220000IN2pw8multibuf8internal12ByteIteratorItLNS3_15ChunkMutabilityE0EEEEENS_15iterator_traitsIT_E15difference_typeES8_S8_

NEW

+32

__atomic_load_4

NEW

+32

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

NEW

+32

pw::allocator::ChunkPool

NEW

+32

pw::allocator::Pool

NEW

+32

pw::multibuf::internal::ByteIterator<>::operator*()

NEW

+32

pw::multibuf::internal::GenericMultiBuf::GenericMultiBuf()

NEW

+32

pw::multibuf::internal::GenericMultiBuf::begin()

NEW

+32

pw::multibuf::internal::GenericMultiBuf::cend()

NEW

+32

pw::multibuf::internal::GenericMultiBuf::end()

NEW

+30

pw::multibuf::internal::GenericMultiBuf::cbegin()

NEW

+30

pw::multibuf::internal::GenericMultiBuf::operator=()

NEW

+28

pw::allocator::internal::ControlBlock::~ControlBlock()

NEW

+28

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

NEW

+28

pw::multibuf::internal::ByteIterator<>::ByteIterator()

NEW

+24

__aeabi_uidivmod

NEW

+24

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

NEW

+24

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

NEW

+22

_ZN2pw9allocator4Pool10MakeUniqueIA_St4byteTpTnRiJETnNSt3__29enable_ifIX20is_unbounded_array_vIT_EEiE4typeELi0EEENS_9UniquePtrIS8_EEv

NEW

+22

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

NEW

+22

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

NEW

+22

pw::multibuf::internal::operator+()

NEW

+20

_ZNSt3__29__destroyB9nqn220000INS_11__wrap_iterIPN2pw8multibuf8internal8InstanceINS2_13BasicMultiBufIJLNS3_8PropertyE2EEEEEEEEEET_SC_SC_

NEW

+20

pw::DynamicDeque<>::try_reserve_exact()

NEW

+20

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

NEW

+20

pw::multibuf::internal::ByteIterator<>::operator++()

NEW

+20

pw::multibuf::internal::GenericMultiBuf::IsOwned()

NEW

+20

pw::multibuf::internal::GenericMultiBuf::IsShared()

NEW

+20

pw::multibuf::internal::operator<()

NEW

+20

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

NEW

+20

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

NEW

+18

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

NEW

+18

pw::multibuf::internal::GenericMultiBuf::GetData()

NEW

+16

__aeabi_idivmod

NEW

+16

pw::multibuf::internal::ByteIterator<>::operator ?<>()

NEW

+16

pw::multibuf::internal::GenericMultiBuf::~GenericMultiBuf()

NEW

+14

_ZNSt3__224__optional_destruct_baseIN2pw8multibuf8internal8InstanceINS1_13BasicMultiBufIJLNS2_8PropertyE2EEEEEELb0EED2B9nqn220000Ev

NEW

+14

_ZNSt3__28optionalIN2pw8multibuf8internal8InstanceINS1_13BasicMultiBufIJLNS2_8PropertyE2EEEEEEEC2B9nqn220000IS8_TnNS_9enable_ifIXclsr22_CheckOptionalArgsCtorIT_EE17__enable_implicitISC_EEEiE4typeELi0EEEOSC_

NEW

+14

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

NEW

+14

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

NEW

+14

pw::multibuf::internal::ChunkIterator<>::operator ?<>()

NEW

+12

_ZNSt3__213__atomic_baseIjLb0EE21compare_exchange_weakB9nqn220000ERjjNS_12memory_orderE

NEW

+12

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

NEW

+12

pw::multibuf::internal::GenericMultiBuf::CopyTo()

NEW

+10

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

NEW

+10

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

NEW

+10

pw::multibuf::internal::GenericMultiBuf::Chunks()

NEW

+10

pw::multibuf::internal::GenericMultiBuf::ConstChunks()

NEW

+8

pw::allocator::internal::BaseManagedPtr::Resize()

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

+11,808

RAM

NEW

+1,024

pw::multibuf::size_report::metadata_region

+1,024

Cost of using MultiBuf v2 vs. v1

FLASH

+892

[section .rodata]

DEL

-424

pw::multibuf::size_report::ReceiverV1

DEL

-424

pw::multibuf::size_report::SenderV1

DEL

-372

xQueueSemaphoreTake

DEL

-348

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

DEL

-216

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

DEL

-172

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

-24

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

+84

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

DEL

-168

vTaskPriorityDisinheritAfterTimeout

DEL

-162

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

DEL

-140

xTaskPriorityInherit

+12

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

DEL

-128

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

+2

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

DEL

-120

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

+44

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

DEL

-112

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

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

-96

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

DEL

-92

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

+4

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

DEL

-92

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

DEL

-90

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

DEL

-90

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

+44

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

DEL

-84

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

DEL

-80

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

-40

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

DEL

-80

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

DEL

-80

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

+60

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

+2

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

DEL

-72

vQueueUnregisterQueue

DEL

-70

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

DEL

-70

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

DEL

-68

_ZNSt3__212__equal_implB9nqn220000IN2pw8multibuf8MultiBuf8iteratorES4_PKSt4byteS7_NS_10__equal_toENS_10__identityES9_EEbT_T0_T1_T2_RT3_RT4_RT5_

DEL

-66

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

DEL

-64

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

DEL

-62

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

DEL

-60

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

DEL

-60

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

DEL

-54

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

+44

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

DEL

-52

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

DEL

-52

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

DEL

-52

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

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

-40

vQueueDelete

DEL

-38

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

+10

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

DEL

-36

pw::Deallocator::DeleteArray<>()

+2

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

-18

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

DEL

-36

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

DEL

-34

_ZNSt3__25equalB9nqn220000IN2pw8multibuf8MultiBuf8iteratorENS_11__wrap_iterIPKSt4byteEENS_10__equal_toEEEbT_SB_T0_SC_T1_

DEL

-34

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

+2

pw::Allocator::Reallocate()

-16

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

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_15SimpleAllocatorERKNSt3__24spanISt4byteLj4294967295EEEEEENS8_9enable_ifIXntsr3stdE10is_array_vIT_EEPSF_E4typeEDpOT1_

DEL

-30

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

DEL

-28

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

DEL

-28

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

-2

pw::Allocator::Resize()

DEL

-26

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

DEL

-24

_ZNSt3__29__destroyB9nqn220000INS_11__wrap_iterIPN2pw8multibuf8MultiBufEEEEET_S7_S7_

DEL

-24

prvIsQueueEmpty

DEL

-24

pvTaskIncrementMutexHeldCount

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

-2

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

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_baseIN2pw8multibuf10OwnedChunkELb0EED2B9nqn220000Ev

DEL

-20

_ZNSt3__224__optional_destruct_baseIN2pw8multibuf8MultiBufELb0EED2B9nqn220000Ev

DEL

-20

_ZNSt3__29destroy_nB9nqn220000IPN2pw8multibuf8internal19LinkedRegionTrackerEjEET_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__25equalB9nqn220000IN2pw8multibuf8MultiBuf8iteratorENS_11__wrap_iterIPKSt4byteEEEEbT_SA_T0_SB_

+14

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

DEL

-18

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

DEL

-18

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

-4

__bi_84

DEL

-16

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

DEL

-16

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

DEL

-16

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

DEL

-14

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

+12

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

DEL

-12

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

DEL

-12

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

DEL

-12

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

DEL

-10

_ZN2pw11Deallocator6DeleteINS_8multibuf8internal19LinkedRegionTrackerETpTnRiJETnNSt3__29enable_ifIXnt10is_array_vIT_EEiE4typeELi0EEEvPS8_

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

+12

vClearInterruptMaskFromISR

NEW

+612

pw::multibuf::internal::GenericMultiBuf::Insert()

NEW

+424

pw::multibuf::size_report::ReceiverV2

NEW

+424

pw::multibuf::size_report::SenderV2

NEW

+312

pw::multibuf::internal::ChunkIterator<>::ResetCurrent()

NEW

+264

pw::multibuf::internal::GenericMultiBuf::PopLayer()

NEW

+238

_ZNSt3__234__cxx_atomic_compare_exchange_weakB9nqn220000IjEEbPNS_22__cxx_atomic_base_implIT_EEPS2_S2_NS_12memory_orderES6_

NEW

+232

pw::multibuf::internal::ChunkIterator<>::operator–()

NEW

+224

pw::multibuf::internal::ChunkIterator<>::operator++()

NEW

+224

pw::multibuf::internal::GenericMultiBuf::InsertChunks()

NEW

+218

pw::multibuf::internal::GenericMultiBuf::AddLayer()

NEW

+216

pw::multibuf::internal::GenericMultiBuf::TryReserveForInsert()

NEW

+212

pw::multibuf::internal::GenericMultiBuf::ClearRange()

NEW

+212

pw::multibuf::internal::GenericMultiBuf::EraseRange()

NEW

+192

pw::multibuf::internal::GenericMultiBuf::SplitAfter()

NEW

+188

pw::multibuf::internal::GenericMultiBuf::TruncateTopLayer()

NEW

+176

pw::multibuf::internal::ChunkIterator<>::operator->()

NEW

+176

pw::multibuf::internal::operator-()

NEW

+172

pw::multibuf::internal::GenericMultiBuf::SetLayer()

NEW

+156

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

NEW

+156

pw::multibuf::internal::GenericMultiBuf::SplitBase()

NEW

+144

pw::multibuf::internal::GenericMultiBuf::SplitBefore()

NEW

+140

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

NEW

+132

pw::DynamicDeque<>::ReallocateBuffer()

NEW

+128

_ZNSt3__25equalB9nqn220000IN2pw8multibuf8internal12ByteIteratorItLNS3_15ChunkMutabilityE0EEENS_11__wrap_iterIPKSt4byteEENS_10__equal_toEEEbT_SD_T0_SE_T1_

NEW

+128

pw::multibuf::internal::ByteIterator<>::operator+=()

NEW

+128

pw::multibuf::internal::GenericMultiBuf::CheckRange()

NEW

+120

pw::multibuf::internal::ByteIterator<>::operator-=()

NEW

+120

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

NEW

+116

pw::multibuf::internal::GenericMultiBuf::TryConvertToShared()

NEW

+112

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

NEW

+112

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

NEW

+104

pw::multibuf::internal::ChunkIterator<>::data()

NEW

+104

pw::multibuf::internal::GenericMultiBuf::CopyToImpl()

NEW

+104

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

NEW

+102

pw::multibuf::internal::GenericMultiBuf::CopyFrom()

NEW

+100

_ZNKSt3__211__move_implINS_17_ClassicAlgPolicyEEclB9nqn220000IN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeINS4_8multibuf8internal5EntryEtEEEESD_SD_EENS_4pairIT_T1_EESF_T0_SG_

NEW

+100

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

NEW

+98

_ZNKSt3__220__move_backward_implINS_17_ClassicAlgPolicyEEclB9nqn220000IN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeINS4_8multibuf8internal5EntryEtEEEESD_SD_EENS_4pairIT_T1_EESF_T0_SG_

NEW

+98

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

NEW

+92

pw::multibuf::internal::ByteIterator<>::Compare()

NEW

+92

pw::multibuf::internal::GenericMultiBuf::GetChunkAndOffset()

NEW

+90

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

NEW

+88

pw::allocator::internal::ControlBlock::IncrementShared()

NEW

+88

pw::multibuf::internal::ChunkIterator<>::operator*()

NEW

+84

pw::multibuf::internal::ChunksImpl<>::ChunksImpl()

NEW

+84

pw::multibuf::internal::GenericMultiBuf::TryReserveEntries()

NEW

+84

pw::multibuf::internal::operator==()

NEW

+82

pw::multibuf::internal::ChunkIterator<>::ChunkIterator()

NEW

+80

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

NEW

+74

pw::DynamicDeque<>::try_reserve()

NEW

+72

_ZNSt3__212__equal_implB9nqn220000IN2pw8multibuf8internal12ByteIteratorItLNS3_15ChunkMutabilityE0EEES6_PKSt4byteS9_NS_10__equal_toENS_10__identityESB_EEbT_T0_T1_T2_RT3_RT4_RT5_

NEW

+72

pw::SharedPtr<>::reset()

NEW

+72

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

NEW

+72

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

NEW

+68

__atomic_compare_exchange_4

NEW

+68

pw::DynamicDeque<>::IncreaseCapacity()

NEW

+68

pw::multibuf::internal::GenericMultiBuf::Clear()

NEW

+66

pw::multibuf::internal::ChunkIterator<>::is_valid()

NEW

+64

pw::BasicMultiBuf<>::PushBack()

NEW

+64

pw::multibuf::internal::ChunkIterator<>::size()

NEW

+62

pw::multibuf::internal::GenericMultiBuf::IsTopLayerSealed()

NEW

+60

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

NEW

+60

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

NEW

+58

pw::BasicMultiBuf<>::Insert()

NEW

+56

pw::multibuf::internal::GenericMultiBuf::GetRelativeOffset()

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_11__move_implINS_17_ClassicAlgPolicyEEEN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeINS4_8multibuf8internal5EntryEtEEEESD_SD_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISF_SG_EESF_T1_SG_

NEW

+54

_ZNSt3__224__copy_move_unwrap_itersB9nqn220000INS_20__move_backward_implINS_17_ClassicAlgPolicyEEEN2pw10containers8internal13DequeIteratorINS4_12DynamicDequeINS4_8multibuf8internal5EntryEtEEEESD_SD_TnNS_9enable_ifIXsr12__can_rewrapIT0_T2_EE5valueEiE4typeELi0EEENS_4pairISF_SG_EESF_T1_SG_

NEW

+52

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

NEW

+52

pw::allocator::internal::ControlBlock::Create()

NEW

+52

pw::multibuf::internal::GenericMultiBuf::NumFragments()

NEW

+52

pw::multibuf::internal::operator!=()

NEW

+50

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

NEW

+46

_ZNSt3__25equalB9nqn220000IN2pw8multibuf8internal12ByteIteratorItLNS3_15ChunkMutabilityE0EEENS_11__wrap_iterIPKSt4byteEEEEbT_SC_T0_SD_

NEW

+46

pw::multibuf::internal::GenericMultiBuf::GetView()

NEW

+44

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

NEW

+44

pw::multibuf::internal::ChunkIterator<>::operator=()

NEW

+44

pw::multibuf::internal::GenericMultiBuf::GetOffset()

NEW

+42

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

NEW

+42

pw::UniquePtr<>::Reset()

NEW

+40

__atomic_fetch_sub_4

NEW

+40

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

NEW

+40

pw::multibuf::internal::GenericMultiBuf::GetLength()

NEW

+38

pw::multibuf::internal::GenericMultiBuf::IsSealed()

NEW

+38

pw::multibuf::internal::GenericMultiBuf::size()

NEW

+38

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

NEW

+36

_ZNSt3__213move_backwardB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeINS1_8multibuf8internal5EntryEtEEEESA_EET0_T_SC_SB_

NEW

+36

_ZNSt3__24moveB9nqn220000IN2pw10containers8internal13DequeIteratorINS1_12DynamicDequeINS1_8multibuf8internal5EntryEtEEEESA_EET0_T_SC_SB_

NEW

+36

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

NEW

+36

pw::multibuf::internal::GenericMultiBuf::IsBoundary()

NEW

+34

_ZNSt3__28distanceB9nqn220000IN2pw8multibuf8internal12ByteIteratorItLNS3_15ChunkMutabilityE0EEEEENS_15iterator_traitsIT_E15difference_typeES8_S8_

NEW

+32

__atomic_load_4

NEW

+32

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

NEW

+32

pw::allocator::ChunkPool

NEW

+32

pw::allocator::Pool

NEW

+32

pw::multibuf::internal::ByteIterator<>::operator*()

NEW

+32

pw::multibuf::internal::GenericMultiBuf::GenericMultiBuf()

NEW

+32

pw::multibuf::internal::GenericMultiBuf::begin()

NEW

+32

pw::multibuf::internal::GenericMultiBuf::cend()

NEW

+32

pw::multibuf::internal::GenericMultiBuf::end()

NEW

+30

pw::multibuf::internal::GenericMultiBuf::cbegin()

NEW

+30

pw::multibuf::internal::GenericMultiBuf::operator=()

NEW

+28

pw::allocator::internal::ControlBlock::~ControlBlock()

NEW

+28

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

NEW

+28

pw::multibuf::internal::ByteIterator<>::ByteIterator()

NEW

+24

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

NEW

+24

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

NEW

+22

_ZN2pw9allocator4Pool10MakeUniqueIA_St4byteTpTnRiJETnNSt3__29enable_ifIX20is_unbounded_array_vIT_EEiE4typeELi0EEENS_9UniquePtrIS8_EEv

NEW

+22

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

NEW

+22

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

NEW

+22

pw::multibuf::internal::operator+()

NEW

+20

_ZNSt3__29__destroyB9nqn220000INS_11__wrap_iterIPN2pw8multibuf8internal8InstanceINS2_13BasicMultiBufIJLNS3_8PropertyE2EEEEEEEEEET_SC_SC_

NEW

+20

pw::DynamicDeque<>::try_reserve_exact()

NEW

+20

pw::multibuf::internal::ByteIterator<>::operator++()

NEW

+20

pw::multibuf::internal::GenericMultiBuf::IsOwned()

NEW

+20

pw::multibuf::internal::GenericMultiBuf::IsShared()

NEW

+20

pw::multibuf::internal::operator<()

NEW

+20

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

NEW

+20

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

NEW

+18

pw::multibuf::internal::GenericMultiBuf::GetData()

NEW

+16

__aeabi_idivmod

NEW

+16

pw::multibuf::internal::ByteIterator<>::operator ?<>()

NEW

+16

pw::multibuf::internal::GenericMultiBuf::~GenericMultiBuf()

NEW

+14

_ZNSt3__224__optional_destruct_baseIN2pw8multibuf8internal8InstanceINS1_13BasicMultiBufIJLNS2_8PropertyE2EEEEEELb0EED2B9nqn220000Ev

NEW

+14

_ZNSt3__28optionalIN2pw8multibuf8internal8InstanceINS1_13BasicMultiBufIJLNS2_8PropertyE2EEEEEEEC2B9nqn220000IS8_TnNS_9enable_ifIXclsr22_CheckOptionalArgsCtorIT_EE17__enable_implicitISC_EEEiE4typeELi0EEEOSC_

NEW

+14

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

NEW

+14

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

NEW

+14

pw::multibuf::internal::ChunkIterator<>::operator ?<>()

NEW

+12

_ZNSt3__213__atomic_baseIjLb0EE21compare_exchange_weakB9nqn220000ERjjNS_12memory_orderE

NEW

+12

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

NEW

+12

pw::multibuf::internal::GenericMultiBuf::CopyTo()

NEW

+10

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

NEW

+10

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

NEW

+10

pw::multibuf::internal::GenericMultiBuf::Chunks()

NEW

+10

pw::multibuf::internal::GenericMultiBuf::ConstChunks()

NEW

+8

pw::allocator::internal::BaseManagedPtr::Resize()

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

RAM

DEL

-80

xQueueRegistry

-80