xref: /aosp_15_r20/external/pigweed/pw_allocator/api.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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