1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api: 2*61c4878aSAndroid Build Coastguard Worker 3*61c4878aSAndroid Build Coastguard Worker============= 4*61c4878aSAndroid Build Coastguard WorkerAPI reference 5*61c4878aSAndroid Build Coastguard Worker============= 6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module-subpage:: 7*61c4878aSAndroid Build Coastguard Worker :name: pw_allocator 8*61c4878aSAndroid Build Coastguard Worker 9*61c4878aSAndroid Build Coastguard WorkerThis module provides the following: 10*61c4878aSAndroid Build Coastguard Worker 11*61c4878aSAndroid Build Coastguard Worker- Generic allocator interfaces that can be injected into routines that need 12*61c4878aSAndroid Build Coastguard Worker dynamic memory. These include :ref:`module-pw_allocator-api-allocator`, as 13*61c4878aSAndroid Build Coastguard Worker well as the :ref:`module-pw_allocator-api-layout` type that is passed to it 14*61c4878aSAndroid Build Coastguard Worker and the :ref:`module-pw_allocator-api-unique_ptr` returned from it. 15*61c4878aSAndroid Build Coastguard Worker- Concrete allocator implementations used to provide memory dynamically. 16*61c4878aSAndroid Build Coastguard Worker- "Forwarding" allocators, as described by 17*61c4878aSAndroid Build Coastguard Worker :ref:`module-pw_allocator-design-forwarding`. 18*61c4878aSAndroid Build Coastguard Worker- Additional allocator utility classes. These are typically used by allocator 19*61c4878aSAndroid Build Coastguard Worker implementers. 20*61c4878aSAndroid Build Coastguard Worker- Test utilities for testing allocator implementations. These are typically used 21*61c4878aSAndroid Build Coastguard Worker by allocator implementers. 22*61c4878aSAndroid Build Coastguard Worker 23*61c4878aSAndroid Build Coastguard Worker--------------- 24*61c4878aSAndroid Build Coastguard WorkerCore interfaces 25*61c4878aSAndroid Build Coastguard Worker--------------- 26*61c4878aSAndroid Build Coastguard WorkerThis module defines several types as part of a generic interface for memory 27*61c4878aSAndroid Build Coastguard Workerusers. 28*61c4878aSAndroid Build Coastguard Worker 29*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-layout: 30*61c4878aSAndroid Build Coastguard Worker 31*61c4878aSAndroid Build Coastguard WorkerLayout 32*61c4878aSAndroid Build Coastguard Worker====== 33*61c4878aSAndroid Build Coastguard WorkerA request for memory includes a requested size and alignment as a ``Layout``: 34*61c4878aSAndroid Build Coastguard Worker 35*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::Layout 36*61c4878aSAndroid Build Coastguard Worker :members: 37*61c4878aSAndroid Build Coastguard Worker 38*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-allocator: 39*61c4878aSAndroid Build Coastguard Worker 40*61c4878aSAndroid Build Coastguard WorkerAllocator 41*61c4878aSAndroid Build Coastguard Worker========= 42*61c4878aSAndroid Build Coastguard Worker``Allocator`` is the most commonly used interface. It can be used to request 43*61c4878aSAndroid Build Coastguard Workermemory of different layouts: 44*61c4878aSAndroid Build Coastguard Worker 45*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::Allocator 46*61c4878aSAndroid Build Coastguard Worker :members: 47*61c4878aSAndroid Build Coastguard Worker 48*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-pool: 49*61c4878aSAndroid Build Coastguard Worker 50*61c4878aSAndroid Build Coastguard WorkerPool 51*61c4878aSAndroid Build Coastguard Worker==== 52*61c4878aSAndroid Build Coastguard Worker``Pool`` differs from ``Allocator`` in that it can be used to request memory of 53*61c4878aSAndroid Build Coastguard Workera single, fixed layout: 54*61c4878aSAndroid Build Coastguard Worker 55*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::Pool 56*61c4878aSAndroid Build Coastguard Worker :members: 57*61c4878aSAndroid Build Coastguard Worker 58*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-deallocator: 59*61c4878aSAndroid Build Coastguard Worker 60*61c4878aSAndroid Build Coastguard WorkerDeallocator 61*61c4878aSAndroid Build Coastguard Worker=========== 62*61c4878aSAndroid Build Coastguard WorkerBoth ``Allocator`` and ``Pool`` derive from and extend ``Deallocator``. This 63*61c4878aSAndroid Build Coastguard Workertype is intended for allocator implementers and not for module consumers. 64*61c4878aSAndroid Build Coastguard Worker 65*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::Deallocator 66*61c4878aSAndroid Build Coastguard Worker :members: 67*61c4878aSAndroid Build Coastguard Worker 68*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-capabilities: 69*61c4878aSAndroid Build Coastguard Worker 70*61c4878aSAndroid Build Coastguard WorkerCapabilities 71*61c4878aSAndroid Build Coastguard Worker============ 72*61c4878aSAndroid Build Coastguard WorkerTypes deriving from ``MemoryResource`` can communicate about their optional 73*61c4878aSAndroid Build Coastguard Workermethods and behaviors using ``Capabilities``. This type is intended for 74*61c4878aSAndroid Build Coastguard Workerallocator implementers and not for module consumers. 75*61c4878aSAndroid Build Coastguard Worker 76*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::Capabilities 77*61c4878aSAndroid Build Coastguard Worker :members: 78*61c4878aSAndroid Build Coastguard Worker 79*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-unique_ptr: 80*61c4878aSAndroid Build Coastguard Worker 81*61c4878aSAndroid Build Coastguard WorkerUniquePtr 82*61c4878aSAndroid Build Coastguard Worker========= 83*61c4878aSAndroid Build Coastguard WorkerThe ``UniquePtr`` smart pointer type can be created by any type deriving from 84*61c4878aSAndroid Build Coastguard Worker``MemoryResource``. 85*61c4878aSAndroid Build Coastguard Worker 86*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::UniquePtr 87*61c4878aSAndroid Build Coastguard Worker :members: 88*61c4878aSAndroid Build Coastguard Worker 89*61c4878aSAndroid Build Coastguard Worker------------------------- 90*61c4878aSAndroid Build Coastguard WorkerAllocator implementations 91*61c4878aSAndroid Build Coastguard Worker------------------------- 92*61c4878aSAndroid Build Coastguard WorkerThis module provides several concrete allocator implementations of the 93*61c4878aSAndroid Build Coastguard Worker:ref:`module-pw_allocator-api-allocator` interface: 94*61c4878aSAndroid Build Coastguard Worker 95*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-block_allocator: 96*61c4878aSAndroid Build Coastguard Worker 97*61c4878aSAndroid Build Coastguard WorkerBlockAllocator 98*61c4878aSAndroid Build Coastguard Worker============== 99*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::BlockAllocator 100*61c4878aSAndroid Build Coastguard Worker :members: 101*61c4878aSAndroid Build Coastguard Worker 102*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-first_fit_allocator: 103*61c4878aSAndroid Build Coastguard Worker 104*61c4878aSAndroid Build Coastguard WorkerFirstFitAllocator 105*61c4878aSAndroid Build Coastguard Worker----------------- 106*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::FirstFitAllocator 107*61c4878aSAndroid Build Coastguard Worker :members: 108*61c4878aSAndroid Build Coastguard Worker 109*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-best_fit_allocator: 110*61c4878aSAndroid Build Coastguard Worker 111*61c4878aSAndroid Build Coastguard WorkerBestFitAllocator 112*61c4878aSAndroid Build Coastguard Worker---------------- 113*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::BestFitAllocator 114*61c4878aSAndroid Build Coastguard Worker :members: 115*61c4878aSAndroid Build Coastguard Worker 116*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-worst_fit_allocator: 117*61c4878aSAndroid Build Coastguard Worker 118*61c4878aSAndroid Build Coastguard WorkerWorstFitAllocator 119*61c4878aSAndroid Build Coastguard Worker----------------- 120*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::WorstFitAllocator 121*61c4878aSAndroid Build Coastguard Worker :members: 122*61c4878aSAndroid Build Coastguard Worker 123*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-bucket_block_allocator: 124*61c4878aSAndroid Build Coastguard Worker 125*61c4878aSAndroid Build Coastguard WorkerBucketAllocator 126*61c4878aSAndroid Build Coastguard Worker=============== 127*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::BucketAllocator 128*61c4878aSAndroid Build Coastguard Worker :members: 129*61c4878aSAndroid Build Coastguard Worker 130*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-buddy_allocator: 131*61c4878aSAndroid Build Coastguard Worker 132*61c4878aSAndroid Build Coastguard WorkerBuddyAllocator 133*61c4878aSAndroid Build Coastguard Worker============== 134*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::BuddyAllocator 135*61c4878aSAndroid Build Coastguard Worker :members: 136*61c4878aSAndroid Build Coastguard Worker 137*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-bump_allocator: 138*61c4878aSAndroid Build Coastguard Worker 139*61c4878aSAndroid Build Coastguard WorkerBumpAllocator 140*61c4878aSAndroid Build Coastguard Worker============= 141*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::BumpAllocator 142*61c4878aSAndroid Build Coastguard Worker :members: 143*61c4878aSAndroid Build Coastguard Worker 144*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-chunk_pool: 145*61c4878aSAndroid Build Coastguard Worker 146*61c4878aSAndroid Build Coastguard WorkerChunkPool 147*61c4878aSAndroid Build Coastguard Worker========= 148*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::ChunkPool 149*61c4878aSAndroid Build Coastguard Worker :members: 150*61c4878aSAndroid Build Coastguard Worker 151*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-libc_allocator: 152*61c4878aSAndroid Build Coastguard Worker 153*61c4878aSAndroid Build Coastguard WorkerLibCAllocator 154*61c4878aSAndroid Build Coastguard Worker============= 155*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::LibCAllocator 156*61c4878aSAndroid Build Coastguard Worker :members: 157*61c4878aSAndroid Build Coastguard Worker 158*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-null_allocator: 159*61c4878aSAndroid Build Coastguard Worker 160*61c4878aSAndroid Build Coastguard WorkerNullAllocator 161*61c4878aSAndroid Build Coastguard Worker============= 162*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::NullAllocator 163*61c4878aSAndroid Build Coastguard Worker :members: 164*61c4878aSAndroid Build Coastguard Worker 165*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-typed_pool: 166*61c4878aSAndroid Build Coastguard Worker 167*61c4878aSAndroid Build Coastguard WorkerTypedPool 168*61c4878aSAndroid Build Coastguard Worker========= 169*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::TypedPool 170*61c4878aSAndroid Build Coastguard Worker :members: 171*61c4878aSAndroid Build Coastguard Worker 172*61c4878aSAndroid Build Coastguard Worker--------------------- 173*61c4878aSAndroid Build Coastguard WorkerForwarding Allocators 174*61c4878aSAndroid Build Coastguard Worker--------------------- 175*61c4878aSAndroid Build Coastguard WorkerThis module provides several "forwarding" allocators, as described in 176*61c4878aSAndroid Build Coastguard Worker:ref:`module-pw_allocator-design-forwarding`. 177*61c4878aSAndroid Build Coastguard Worker 178*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-allocator_as_pool: 179*61c4878aSAndroid Build Coastguard Worker 180*61c4878aSAndroid Build Coastguard WorkerAllocatorAsPool 181*61c4878aSAndroid Build Coastguard Worker=============== 182*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::AllocatorAsPool 183*61c4878aSAndroid Build Coastguard Worker :members: 184*61c4878aSAndroid Build Coastguard Worker 185*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-pmr_allocator: 186*61c4878aSAndroid Build Coastguard Worker 187*61c4878aSAndroid Build Coastguard WorkerPmrAllocator 188*61c4878aSAndroid Build Coastguard Worker============ 189*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::PmrAllocator 190*61c4878aSAndroid Build Coastguard Worker :members: 191*61c4878aSAndroid Build Coastguard Worker 192*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-fallback_allocator: 193*61c4878aSAndroid Build Coastguard Worker 194*61c4878aSAndroid Build Coastguard WorkerFallbackAllocator 195*61c4878aSAndroid Build Coastguard Worker================= 196*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::FallbackAllocator 197*61c4878aSAndroid Build Coastguard Worker :members: 198*61c4878aSAndroid Build Coastguard Worker 199*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-synchronized_allocator: 200*61c4878aSAndroid Build Coastguard Worker 201*61c4878aSAndroid Build Coastguard WorkerSynchronizedAllocator 202*61c4878aSAndroid Build Coastguard Worker===================== 203*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::SynchronizedAllocator 204*61c4878aSAndroid Build Coastguard Worker :members: 205*61c4878aSAndroid Build Coastguard Worker 206*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-tracking_allocator: 207*61c4878aSAndroid Build Coastguard Worker 208*61c4878aSAndroid Build Coastguard WorkerTrackingAllocator 209*61c4878aSAndroid Build Coastguard Worker================= 210*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::TrackingAllocator 211*61c4878aSAndroid Build Coastguard Worker :members: 212*61c4878aSAndroid Build Coastguard Worker 213*61c4878aSAndroid Build Coastguard Worker--------------- 214*61c4878aSAndroid Build Coastguard WorkerUtility Classes 215*61c4878aSAndroid Build Coastguard Worker--------------- 216*61c4878aSAndroid Build Coastguard WorkerIn addition to providing allocator implementations themselves, this module 217*61c4878aSAndroid Build Coastguard Workerincludes some utility classes. 218*61c4878aSAndroid Build Coastguard Worker 219*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-block: 220*61c4878aSAndroid Build Coastguard Worker 221*61c4878aSAndroid Build Coastguard WorkerBlock interfaces 222*61c4878aSAndroid Build Coastguard Worker================ 223*61c4878aSAndroid Build Coastguard WorkerA block is an allocatable region of memory, and is the fundamental type managed 224*61c4878aSAndroid Build Coastguard Workerby several of the concrete allocator implementations. Blocks are defined 225*61c4878aSAndroid Build Coastguard Workerusing several stateless "mix-in" interface types. These provide specific 226*61c4878aSAndroid Build Coastguard Workerfunctionality, while deferring the detailed representation of a block to a 227*61c4878aSAndroid Build Coastguard Workerderived type. 228*61c4878aSAndroid Build Coastguard Worker 229*61c4878aSAndroid Build Coastguard Worker.. tip:: 230*61c4878aSAndroid Build Coastguard Worker Avoid converting pointers to allocations into ``Block`` instances, even if 231*61c4878aSAndroid Build Coastguard Worker you know your memory is coming from a ``BlockAllocator``. Breaking the 232*61c4878aSAndroid Build Coastguard Worker abstraction in this manner will limit your flexibility to change to a 233*61c4878aSAndroid Build Coastguard Worker different allocator in the future. 234*61c4878aSAndroid Build Coastguard Worker 235*61c4878aSAndroid Build Coastguard Worker.. TODO(b/378549332): Add a diagram of mix-in relationships. 236*61c4878aSAndroid Build Coastguard Worker 237*61c4878aSAndroid Build Coastguard WorkerBasicBlock 238*61c4878aSAndroid Build Coastguard Worker---------- 239*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::BasicBlock 240*61c4878aSAndroid Build Coastguard Worker :members: 241*61c4878aSAndroid Build Coastguard Worker 242*61c4878aSAndroid Build Coastguard WorkerContiguousBlock 243*61c4878aSAndroid Build Coastguard Worker--------------- 244*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::ContiguousBlock 245*61c4878aSAndroid Build Coastguard Worker :members: 246*61c4878aSAndroid Build Coastguard Worker 247*61c4878aSAndroid Build Coastguard WorkerAllocatableBlock 248*61c4878aSAndroid Build Coastguard Worker---------------- 249*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::AllocatableBlock 250*61c4878aSAndroid Build Coastguard Worker :members: 251*61c4878aSAndroid Build Coastguard Worker 252*61c4878aSAndroid Build Coastguard WorkerAlignableBlock 253*61c4878aSAndroid Build Coastguard Worker-------------- 254*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::AlignableBlock 255*61c4878aSAndroid Build Coastguard Worker :members: 256*61c4878aSAndroid Build Coastguard Worker 257*61c4878aSAndroid Build Coastguard WorkerBlockWithLayout 258*61c4878aSAndroid Build Coastguard Worker--------------- 259*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::BlockWithLayout 260*61c4878aSAndroid Build Coastguard Worker :members: 261*61c4878aSAndroid Build Coastguard Worker 262*61c4878aSAndroid Build Coastguard WorkerForwardIterableBlock 263*61c4878aSAndroid Build Coastguard Worker-------------------- 264*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::ForwardIterableBlock 265*61c4878aSAndroid Build Coastguard Worker :members: 266*61c4878aSAndroid Build Coastguard Worker 267*61c4878aSAndroid Build Coastguard WorkerReverseIterableBlock 268*61c4878aSAndroid Build Coastguard Worker-------------------- 269*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::ReverseIterableBlock 270*61c4878aSAndroid Build Coastguard Worker :members: 271*61c4878aSAndroid Build Coastguard Worker 272*61c4878aSAndroid Build Coastguard WorkerPoisonableBlock 273*61c4878aSAndroid Build Coastguard Worker--------------- 274*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::PoisonableBlock 275*61c4878aSAndroid Build Coastguard Worker :members: 276*61c4878aSAndroid Build Coastguard Worker 277*61c4878aSAndroid Build Coastguard WorkerBlockResult 278*61c4878aSAndroid Build Coastguard Worker----------- 279*61c4878aSAndroid Build Coastguard WorkerThis type is not a block mix-in. It is used to communicate whether a method 280*61c4878aSAndroid Build Coastguard Workersucceeded, what block was produced or modified, and what side-effects the call 281*61c4878aSAndroid Build Coastguard Workerproduced. 282*61c4878aSAndroid Build Coastguard Worker 283*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::BlockResult 284*61c4878aSAndroid Build Coastguard Worker :members: 285*61c4878aSAndroid Build Coastguard Worker 286*61c4878aSAndroid Build Coastguard WorkerDetailedBlock 287*61c4878aSAndroid Build Coastguard Worker------------- 288*61c4878aSAndroid Build Coastguard WorkerThis type is not a block mix-in. It is an example of a block implementation that 289*61c4878aSAndroid Build Coastguard Workeruses the mix-ins above. 290*61c4878aSAndroid Build Coastguard Worker 291*61c4878aSAndroid Build Coastguard Worker.. doxygenstruct:: pw::allocator::DetailedBlockParameters 292*61c4878aSAndroid Build Coastguard Worker :members: 293*61c4878aSAndroid Build Coastguard Worker 294*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::DetailedBlockImpl 295*61c4878aSAndroid Build Coastguard Worker :members: 296*61c4878aSAndroid Build Coastguard Worker 297*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-bucket: 298*61c4878aSAndroid Build Coastguard Worker 299*61c4878aSAndroid Build Coastguard WorkerBucket 300*61c4878aSAndroid Build Coastguard Worker====== 301*61c4878aSAndroid Build Coastguard WorkerSeveral block allocator implementations improve performance by managing buckets, 302*61c4878aSAndroid Build Coastguard Workerwhich are data structures that track free blocks. Several bucket implementations 303*61c4878aSAndroid Build Coastguard Workerare provided that trade off between performance and per-block space needed when 304*61c4878aSAndroid Build Coastguard Workerfree. 305*61c4878aSAndroid Build Coastguard Worker 306*61c4878aSAndroid Build Coastguard WorkerFastSortedBucket 307*61c4878aSAndroid Build Coastguard Worker---------------- 308*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::FastSortedBucket 309*61c4878aSAndroid Build Coastguard Worker :members: 310*61c4878aSAndroid Build Coastguard Worker 311*61c4878aSAndroid Build Coastguard WorkerForwardSortedBucket 312*61c4878aSAndroid Build Coastguard Worker------------------- 313*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::ForwardSortedBucket 314*61c4878aSAndroid Build Coastguard Worker :members: 315*61c4878aSAndroid Build Coastguard Worker 316*61c4878aSAndroid Build Coastguard WorkerReverseFastSortedBucket 317*61c4878aSAndroid Build Coastguard Worker----------------------- 318*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::ReverseFastSortedBucket 319*61c4878aSAndroid Build Coastguard Worker :members: 320*61c4878aSAndroid Build Coastguard Worker 321*61c4878aSAndroid Build Coastguard WorkerReverseSortedBucket 322*61c4878aSAndroid Build Coastguard Worker------------------- 323*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::ReverseSortedBucket 324*61c4878aSAndroid Build Coastguard Worker :members: 325*61c4878aSAndroid Build Coastguard Worker 326*61c4878aSAndroid Build Coastguard WorkerSequencedBucket 327*61c4878aSAndroid Build Coastguard Worker--------------- 328*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::SequencedBucket 329*61c4878aSAndroid Build Coastguard Worker :members: 330*61c4878aSAndroid Build Coastguard Worker 331*61c4878aSAndroid Build Coastguard WorkerUnorderedBucket 332*61c4878aSAndroid Build Coastguard Worker--------------- 333*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::UnorderedBucket 334*61c4878aSAndroid Build Coastguard Worker :members: 335*61c4878aSAndroid Build Coastguard Worker 336*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-metrics_adapter: 337*61c4878aSAndroid Build Coastguard Worker 338*61c4878aSAndroid Build Coastguard WorkerMetrics 339*61c4878aSAndroid Build Coastguard Worker======= 340*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::internal::Metrics 341*61c4878aSAndroid Build Coastguard Worker :members: 342*61c4878aSAndroid Build Coastguard Worker 343*61c4878aSAndroid Build Coastguard WorkerThis class is templated on a ``MetricsType`` struct. See 344*61c4878aSAndroid Build Coastguard Worker:ref:`module-pw_allocator-design-metrics` for additional details on how the 345*61c4878aSAndroid Build Coastguard Workerstruct, this class, and :ref:`module-pw_allocator-api-tracking_allocator` 346*61c4878aSAndroid Build Coastguard Workerinteract. 347*61c4878aSAndroid Build Coastguard Worker 348*61c4878aSAndroid Build Coastguard WorkerModule consumers can define their own metrics structs using the 349*61c4878aSAndroid Build Coastguard Workerfollowing macros: 350*61c4878aSAndroid Build Coastguard Worker 351*61c4878aSAndroid Build Coastguard Worker.. doxygendefine:: PW_ALLOCATOR_METRICS_DECLARE 352*61c4878aSAndroid Build Coastguard Worker.. doxygendefine:: PW_ALLOCATOR_METRICS_ENABLE 353*61c4878aSAndroid Build Coastguard Worker 354*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-fragmentation: 355*61c4878aSAndroid Build Coastguard Worker 356*61c4878aSAndroid Build Coastguard WorkerFragmentation 357*61c4878aSAndroid Build Coastguard Worker============= 358*61c4878aSAndroid Build Coastguard Worker.. doxygenstruct:: pw::allocator::Fragmentation 359*61c4878aSAndroid Build Coastguard Worker :members: 360*61c4878aSAndroid Build Coastguard Worker 361*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-size_reporter: 362*61c4878aSAndroid Build Coastguard Worker 363*61c4878aSAndroid Build Coastguard WorkerSizeReporter 364*61c4878aSAndroid Build Coastguard Worker============ 365*61c4878aSAndroid Build Coastguard WorkerThis module includes a utility class for generating size reports. It is 366*61c4878aSAndroid Build Coastguard Workerintended for allocator implementers and not for module consumers. 367*61c4878aSAndroid Build Coastguard Worker 368*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::SizeReporter 369*61c4878aSAndroid Build Coastguard Worker :members: 370*61c4878aSAndroid Build Coastguard Worker 371*61c4878aSAndroid Build Coastguard WorkerBuffer management 372*61c4878aSAndroid Build Coastguard Worker================= 373*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::WithBuffer 374*61c4878aSAndroid Build Coastguard Worker :members: 375*61c4878aSAndroid Build Coastguard Worker 376*61c4878aSAndroid Build Coastguard Worker------------ 377*61c4878aSAndroid Build Coastguard WorkerTest support 378*61c4878aSAndroid Build Coastguard Worker------------ 379*61c4878aSAndroid Build Coastguard WorkerThis module includes test utilities for allocator implementers. These 380*61c4878aSAndroid Build Coastguard Workerfacilitate writing unit tests and fuzz tests for both concrete and forwarding 381*61c4878aSAndroid Build Coastguard Workerallocator implementations. They are not intended to be used by module consumers. 382*61c4878aSAndroid Build Coastguard Worker 383*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-allocator_for_test: 384*61c4878aSAndroid Build Coastguard Worker 385*61c4878aSAndroid Build Coastguard WorkerAllocatorForTest 386*61c4878aSAndroid Build Coastguard Worker================ 387*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::test::AllocatorForTest 388*61c4878aSAndroid Build Coastguard Worker :members: 389*61c4878aSAndroid Build Coastguard Worker 390*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-synchronized_allocator_for_test: 391*61c4878aSAndroid Build Coastguard Worker 392*61c4878aSAndroid Build Coastguard WorkerSynchronizedAllocatorForTest 393*61c4878aSAndroid Build Coastguard Worker============================ 394*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::test::SynchronizedAllocatorForTest 395*61c4878aSAndroid Build Coastguard Worker :members: 396*61c4878aSAndroid Build Coastguard Worker 397*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-test_harness: 398*61c4878aSAndroid Build Coastguard Worker 399*61c4878aSAndroid Build Coastguard WorkerTestHarness 400*61c4878aSAndroid Build Coastguard Worker=========== 401*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::allocator::test::TestHarness 402*61c4878aSAndroid Build Coastguard Worker :members: 403*61c4878aSAndroid Build Coastguard Worker 404*61c4878aSAndroid Build Coastguard Worker.. _module-pw_allocator-api-fuzzing_support: 405*61c4878aSAndroid Build Coastguard Worker 406*61c4878aSAndroid Build Coastguard WorkerFuzzTest support 407*61c4878aSAndroid Build Coastguard Worker================ 408*61c4878aSAndroid Build Coastguard Worker.. doxygenfunction:: pw::allocator::test::ArbitraryRequest 409*61c4878aSAndroid Build Coastguard Worker.. doxygenfunction:: pw::allocator::test::ArbitraryRequests 410*61c4878aSAndroid Build Coastguard Worker.. doxygenfunction:: pw::allocator::test::MakeRequest 411