FixedBufferAllocator< T, COUNT, PARENT_ALLOCATOR, SINGLE_ALLOCATION > Class Template Reference

#include <fixedbufferallocator.h>

Inheritance diagram for FixedBufferAllocator< T, COUNT, PARENT_ALLOCATOR, SINGLE_ALLOCATION >:

详细描述

template<typename T, Int COUNT, typename PARENT_ALLOCATOR, Bool SINGLE_ALLOCATION = false>
class maxon::FixedBufferAllocator< T, COUNT, PARENT_ALLOCATOR, SINGLE_ALLOCATION >

Fixed allocator. A fixed allocator contains ' SIZEOF(T) * COUNT' bytes memory on stack. The first memory request (and any Resize calls) that are smaller than this size will return this static memory. All other requests will be routed to the PARENT_ALLOCATOR. The fixed allocator is not thread-safe!

Here an example for the use of a fixed allocator:

BaseArray<Char, 16, BASEARRAYFLAGS::NONE, FixedBufferAllocator<Char, 1024, DefaultAllocator>> buf;

In the example a BaseArray will use the guaranteed 1024 bytes from the stack / fixed allocator first. Only when the BaseArray grows bigger than 1024 characters more memory from the DefaultAllocator will be fetched. This is a convenient way to allow routines be flexible without (length) limits, but avoiding constant unnecessary memory allocations.

Template Parameters
T A type for the size computation.
COUNT Number of T-typed elements to reserve on the stack.
PARENT_ALLOCATOR The allocator that shall be used when a request cannot be satisfied using the static memory.
SINGLE_ALLOCATION False by default. True is used by the BaseArray as optimization.

公共成员函数

  FixedBufferAllocator ( Bool used=false)
  FixedBufferAllocator (const PARENT_ALLOCATOR &parent)
void *  Alloc ( Int32 s, MAXON_SOURCE_LOCATION_DECLARATION )
void *  Alloc ( Int64 s, MAXON_SOURCE_LOCATION_DECLARATION )
void *  Realloc (void *p, Int32 n, MAXON_SOURCE_LOCATION_DECLARATION )
void *  Realloc (void *p, Int64 n, MAXON_SOURCE_LOCATION_DECLARATION )
template<typename PTRTYPE >
void  Free (PTRTYPE *&p)
Bool   IsCompatibleWithDefaultAllocator (void *p) const

静态公共成员函数

static Int   ComputeArraySize ( Int currentSize, Int increment, Int minChunkSize)

私有成员函数

  MAXON_DISALLOW_COPY_AND_ASSIGN ( FixedBufferAllocator )

Private Attributes

FixedBufferMemory < SIZE , PARENT_ALLOCATOR, SINGLE_ALLOCATION==false >  _memory

Static Private Attributes

static const Int   SIZE

构造函数 & 析构函数文档编制

◆  FixedBufferAllocator() [1/2]

FixedBufferAllocator ( Bool   used = false )
explicit

Default constructor.

◆  FixedBufferAllocator() [2/2]

FixedBufferAllocator ( const PARENT_ALLOCATOR &  parent )
explicit

Copy constructor.

成员函数文档编制

◆  ComputeArraySize()

static Int ComputeArraySize ( Int   currentSize ,
Int   increment ,
Int   minChunkSize  
)
static

Computes the new size for a growing array THREADSAFE.

参数
[in] currentSize Current number of elements.
[in] increment Number of elements to be added (>= 1)
[in] minChunkSize The minimum number of elements upon array creation.
返回
New number of elements.

◆  Alloc() [1/2]

void* Alloc ( Int32   s ,
MAXON_SOURCE_LOCATION_DECLARATION    
)

Allocates a memory block. The memory is not cleared, it may contain a certain byte pattern in debug mode.

参数
[in] s Block size in bytes (values < 0 will return nullptr)
[in] allocLocation Pass MAXON_SOURCE_LOCATION(_NAME) to add the current source line and file.
返回
Memory block address or nullptr.

◆  Alloc() [2/2]

void* Alloc ( Int64   s ,
MAXON_SOURCE_LOCATION_DECLARATION    
)

Allocates a memory block. The memory is not cleared, it may contain a certain byte pattern in debug mode.

参数
[in] s Block size in bytes (values < 0 will return nullptr)
[in] allocLocation Pass MAXON_SOURCE_LOCATION(_NAME) to add the current source line and file.
返回
Memory block address or nullptr.

◆  Realloc() [1/2]

void* Realloc ( void *  p ,
Int32   n ,
MAXON_SOURCE_LOCATION_DECLARATION    
)

Resizes a memory block. The content of the memory block is preserved up to the lesser of the new and old sizes, even if the block is moved to a new location. The additional memory is not cleared, it may contain a certain byte pattern in debug mode. In case that p is a nullptr the function behaves like Alloc. If the function fails to allocate the requested block of memory a nullptr is returned and the memory block pointed to by argument p is not deallocated (it is still valid with its contents unchanged). THREADSAFE.

参数
[in] p Current memory block (can be nullptr)
[in] n New block size in bytes (values < 0 will return nullptr)
[in] allocLocation Pass MAXON_SOURCE_LOCATION(_NAME) to add the current source line and file.
返回
Memory block address or nullptr if resize is not possible (p is still valid in this case)

◆  Realloc() [2/2]

void* Realloc ( void *  p ,
Int64   n ,
MAXON_SOURCE_LOCATION_DECLARATION    
)

Resizes a memory block. The content of the memory block is preserved up to the lesser of the new and old sizes, even if the block is moved to a new location. The additional memory is not cleared, it may contain a certain byte pattern in debug mode. In case that p is a nullptr the function behaves like Alloc. If the function fails to allocate the requested block of memory a nullptr is returned and the memory block pointed to by argument p is not deallocated (it is still valid with its contents unchanged). THREADSAFE.

参数
[in] p Current memory block (can be nullptr)
[in] n New block size in bytes (values < 0 will return nullptr)
[in] allocLocation Pass MAXON_SOURCE_LOCATION(_NAME) to add the current source line and file.
返回
Memory block address or nullptr if resize is not possible (p is still valid in this case)

◆  Free()

void Free ( PTRTYPE *&  p )

Frees a memory block.

参数
[in,out] p Memory block address (can be nullptr, will be nullptr after return)

◆  IsCompatibleWithDefaultAllocator()

Bool IsCompatibleWithDefaultAllocator ( void *  p ) const

Returns if a memory block allocated via this allocator can be reallocated or freed by the DefaultAllocator .

参数
[in] p Memory block address.
返回
True if the memory block can be reallocated or freed by the DefaultAllocator .

◆  MAXON_DISALLOW_COPY_AND_ASSIGN()

MAXON_DISALLOW_COPY_AND_ASSIGN ( FixedBufferAllocator < T, COUNT, PARENT_ALLOCATOR, SINGLE_ALLOCATION >  )
private

Member Data Documentation

◆  SIZE

const Int SIZE
static private

◆  _memory

FixedBufferMemory < SIZE , PARENT_ALLOCATOR, SINGLE_ALLOCATION == false> _memory
private