LLVM API Documentation

Public Member Functions | Friends
llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold > Class Template Reference

Allocate memory in an ever growing pool, as if by bump-pointer. More...

#include <Allocator.h>

Inheritance diagram for llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >:
Inheritance graph
[legend]
Collaboration diagram for llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 static_assert (SizeThreshold<=SlabSize,"The SizeThreshold must be at most the SlabSize to ensure ""that objects larger than a slab go into their own memory ""allocation.")
 BumpPtrAllocatorImpl ()
template<typename T >
 BumpPtrAllocatorImpl (T &&Allocator)
 BumpPtrAllocatorImpl (BumpPtrAllocatorImpl &&Old)
 ~BumpPtrAllocatorImpl ()
BumpPtrAllocatorImploperator= (BumpPtrAllocatorImpl &&RHS)
void Reset ()
 Deallocate all but the current slab and reset the current pointer to the beginning of it, freeing all memory allocated so far.
LLVM_ATTRIBUTE_RETURNS_NONNULL
void * 
Allocate (size_t Size, size_t Alignment)
 Allocate space at the specified alignment.
void Deallocate (const void *, size_t)
 Deallocate Ptr to Size bytes of memory allocated by this allocator.
size_t GetNumSlabs () const
size_t getTotalMemory () const
void PrintStats () const

Friends

class SpecificBumpPtrAllocator

Detailed Description

template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
class llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >

Allocate memory in an ever growing pool, as if by bump-pointer.

This isn't strictly a bump-pointer allocator as it uses backing slabs of memory rather than relying on boundless contiguous heap. However, it has bump-pointer semantics in that is a monotonically growing pool of memory where every allocation is found by merely allocating the next N bytes in the slab, or the next N bytes in the next slab.

Note that this also has a threshold for forcing allocations above a certain size into their own slab.

The BumpPtrAllocatorImpl template defaults to using a MallocAllocator object, which wraps malloc, to allocate memory, but it can be changed to use a custom allocator.

Definition at line 135 of file Allocator.h.


Constructor & Destructor Documentation

template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::BumpPtrAllocatorImpl ( ) [inline]

Definition at line 144 of file Allocator.h.

template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
template<typename T >
llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::BumpPtrAllocatorImpl ( T &&  Allocator) [inline]

Definition at line 147 of file Allocator.h.

template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::BumpPtrAllocatorImpl ( BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold > &&  Old) [inline]

Definition at line 153 of file Allocator.h.

template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::~BumpPtrAllocatorImpl ( ) [inline]

Member Function Documentation

template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
LLVM_ATTRIBUTE_RETURNS_NONNULL void* llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::Allocate ( size_t  Size,
size_t  Alignment 
) [inline]
template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
void llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::Deallocate ( const void *  Ptr,
size_t  Size 
) [inline]

Deallocate Ptr to Size bytes of memory allocated by this allocator.

Reimplemented from llvm::AllocatorBase< BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold > >.

Definition at line 253 of file Allocator.h.

Referenced by llvm::MachineFunction::~MachineFunction().

template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
size_t llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::GetNumSlabs ( ) const [inline]
template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
size_t llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::getTotalMemory ( ) const [inline]
template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
BumpPtrAllocatorImpl& llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::operator= ( BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold > &&  RHS) [inline]
template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
void llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::PrintStats ( ) const [inline]
template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
void llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::Reset ( ) [inline]
template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::static_assert ( SizeThreshold<=  SlabSize,
"The SizeThreshold must be at most the SlabSize to ensure ""that objects larger than a slab go into their own memory ""allocation."   
)

Friends And Related Function Documentation

template<typename AllocatorT = MallocAllocator, size_t SlabSize = 4096, size_t SizeThreshold = SlabSize>
friend class SpecificBumpPtrAllocator [friend]

Definition at line 349 of file Allocator.h.


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