C/C++ API Reference
Loading...
Searching...
No Matches
pw::allocator::BuddyAllocator< kMinOuterSize_, kNumBuckets > Class Template Reference

Overview

template<size_t kMinOuterSize_ = internal::GenericBuddyAllocator::kDefaultMinOuterSize, size_t kNumBuckets = internal::GenericBuddyAllocator::kDefaultNumBuckets>
class pw::allocator::BuddyAllocator< kMinOuterSize_, kNumBuckets >

Allocator that uses the buddy memory allocation algorithm.

This allocator allocates blocks of memory whose sizes are powers of two. This allows the allocator to satisfy requests to acquire and release memory very quickly, at the possible cost of higher internal fragmentation. In particular:

  • The maximum alignment for this allocator is kMinInnerSize.
  • The minimum size of an allocation is kMinInnerSize. Less may be requested, but it will be satisfied by a block of that inner size.
  • The maximum size of an allocation is kMinInnerSize << (kNumBuckets - 1).

Use this allocator if you know the needed sizes are close to but less than the block inner sizes and you need high allocator performance.

Template Parameters
kMinOuterSizeOuter size of the smallest allocatable block. Must be a power of two. All allocations will use at least this much memory.
kNumBucketsNumber of buckets. Must be at least 1. Each additional bucket allows combining blocks into larger blocks.
Inheritance diagram for pw::allocator::BuddyAllocator< kMinOuterSize_, kNumBuckets >:
pw::allocator::internal::GenericBuddyAllocator pw::Allocator pw::Deallocator

Public Member Functions

constexpr BuddyAllocator ()
 Constructs an allocator. Callers must call Init.
 
 BuddyAllocator (ByteSpan region)
 
- Public Member Functions inherited from pw::allocator::internal::GenericBuddyAllocator
void InitBuckets (span< UnorderedBucket< BuddyBlock > > buckets, size_t min_outer_size)
 
void Init (ByteSpan region)
 Sets the memory used to allocate blocks.
 
- Public Member Functions inherited from pw::Allocator
void * Allocate (Layout layout)
 
template<typename T , int &... kExplicitGuard, typename... Args>
std::enable_if_t<!std::is_array_v< T >, T * > New (Args &&... args)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_bounded_array_v< T >, int > = 0>
ElementType * New ()
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
ElementType * New (size_t count)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
ElementType * New (size_t count, size_t alignment)
 Constructs an alignment-byte aligned array of count objects.
 
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0, typename... Args>
UniquePtr< T > MakeUnique (Args &&... args)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
UniquePtr< T > MakeUnique (size_t size)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
UniquePtr< T > MakeUnique (size_t size, size_t alignment)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_bounded_array_v< T >, int > = 0>
UniquePtr< T > MakeUnique ()
 
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0, typename... Args>
SharedPtr< T > MakeShared (Args &&... args)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
SharedPtr< T > MakeShared (size_t size)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
SharedPtr< T > MakeShared (size_t size, size_t alignment)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_bounded_array_v< T >, int > = 0>
SharedPtr< T > MakeShared ()
 
bool Resize (void *ptr, size_t new_size)
 
void * Reallocate (void *ptr, Layout new_layout)
 
size_t GetAllocated () const
 
std::optional< allocator::FragmentationMeasureFragmentation () const
 Returns fragmentation information for the allocator's memory region.
 
- Public Member Functions inherited from pw::Deallocator
constexpr const Capabilitiescapabilities () const
 
constexpr bool HasCapability (Capability capability) const
 Returns whether a given capability is enabled for this object.
 
void Deallocate (void *ptr)
 
template<typename ElementType >
void DeleteArray (ElementType *ptr, size_t count)
 
StatusWithSize GetCapacity () const
 
bool IsEqual (const Deallocator &other) const
 
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0>
void Delete (T *ptr)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_bounded_array_v< T >, int > = 0>
void Delete (ElementType *ptr)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
void Delete (ElementType *ptr, size_t count)
 

Static Public Attributes

static constexpr size_t kMinOuterSize = kMinOuterSize_
 
- Static Public Attributes inherited from pw::allocator::internal::GenericBuddyAllocator
static constexpr Capabilities kCapabilities
 
static constexpr size_t kDefaultMinOuterSize = 16
 
static constexpr size_t kDefaultNumBuckets = 16
 

Additional Inherited Members

- Public Types inherited from pw::Deallocator
using Capabilities = allocator::Capabilities
 
using Capability = allocator::Capability
 
using Layout = allocator::Layout
 
- Protected Member Functions inherited from pw::allocator::internal::GenericBuddyAllocator
void CrashIfAllocated ()
 
- Protected Member Functions inherited from pw::Allocator
constexpr Allocator ()=default
 TODO(b/326509341): Remove when downstream consumers migrate.
 
constexpr Allocator (const Capabilities &capabilities)
 
virtual std::optional< allocator::FragmentationDoMeasureFragmentation () const
 
- Protected Member Functions inherited from pw::Deallocator
constexpr Deallocator ()=default
 TODO(b/326509341): Remove when downstream consumers migrate.
 
constexpr Deallocator (const Capabilities &capabilities)
 
- Static Protected Attributes inherited from pw::Deallocator
template<typename T >
static constexpr bool is_bounded_array_v
 
template<typename T >
static constexpr bool is_unbounded_array_v
 

Constructor & Destructor Documentation

◆ BuddyAllocator()

template<size_t kMinOuterSize_ = internal::GenericBuddyAllocator::kDefaultMinOuterSize, size_t kNumBuckets = internal::GenericBuddyAllocator::kDefaultNumBuckets>
pw::allocator::BuddyAllocator< kMinOuterSize_, kNumBuckets >::BuddyAllocator ( ByteSpan  region)
inline

Constructs an allocator, and initializes it with the given memory region.

Parameters
[in]regionRegion of memory to use when satisfying allocation requests. The region MUST be large enough to fit a least one minimally-size BuddyBlock.

The documentation for this class was generated from the following file: