This class implements the ManagedAllocator protocol to provide a fast allocator that dispenses heterogeneous blocks of memory (of varying, user‐specified sizes) from a sequence of dynamically‐allocated buffers. Memory for the internal buffers is supplied by an (optional) allocator supplied at construction; if no allocator is supplied, the currently installed default allocator is used. If an allocation exceeds the remaining free memory space in the current buffer, the allocator replenishes its internal buffer with new memory to satisfy the request. This class is exception neutral: If memory cannot be allocated, the behavior is defined by the (optional) allocator specified at construction.

Synopsis

Declared in <bdlma_sequentialallocator.h>

class SequentialAllocator
    : public ManagedAllocator

Base Classes

Name

Description

ManagedAllocator

This protocol class extends bslma::Allocator for allocators with the ability to release all memory currently allocated through the protocol back to the memory supplier of the derived concrete allocator object.

Type Aliases

Name

Description

size_type

Alias for an unsigned integral type capable of representing the number of bytes in this platform's virtual address space.

Member Functions

Name

Description

SequentialAllocator [constructor]

Constructors

~SequentialAllocator [destructor] [virtual]

Destroy this sequential allocator. All memory allocated from this allocator is released.

operator=

allocate

allocate overloads

allocateAndExpand

Return the address of a contiguous block of memory of at least the specified *size (in bytes), and load the actual amount of memory allocated into *size. If *size is 0, return 0 with no effect. If the allocation request exceeds the remaining free memory space in the current internal buffer, use the allocator supplied at construction to allocate a new internal buffer, then allocate memory from the new buffer.

deallocate

This method has no effect on the memory block at the specified address as all memory allocated by this allocator is managed. The behavior is undefined unless address is 0, or was allocated by this allocator and has not already been deallocated.

deleteObject

deleteObject overloads

deleteObjectRaw

deleteObjectRaw overloads

is_equal

release [virtual]

Release all memory allocated through this allocator and return to the underlying allocator all memory. The allocator is reset to its default‐constructed state, retaining the alignment and growth strategies, and the initial and maximum buffer sizes in effect following construction. The effect of subsequently ‐ to this invokation of release ‐ using a pointer obtained from this object prior to this call to release is undefined.

reserveCapacity

Reserve sufficient memory to satisfy allocation requests for at least the specified numBytes without replenishment (i.e., without dynamic allocation). If numBytes is 0, no memory is reserved. Note that, when the numBytes is distributed over multiple allocate requests ‐ due to alignment effects ‐ it is possible that not all numBytes of memory will be used for allocation before triggering dynamic allocation.

rewind [virtual]

Release all memory allocated through this allocator and return to the underlying allocator only memory that was allocated outside of the typical internal buffer growth of this allocator (i.e., large blocks). All retained memory will be used to satisfy subsequent allocations. The effect of subsequently ‐ to this invokation of rewind ‐ using a pointer obtained from this object prior to this call to rewind is undefined.

truncate

Reduce the amount of memory allocated at the specified address of the specified originalSize (in bytes) to the specified newSize. Return newSize after truncating, or originalSize if the memory block at address cannot be truncated. This method can only truncate the memory block returned by the most recent allocate request from this allocator, and otherwise has no effect. The behavior is undefined unless the memory block at address was originally allocated by this allocator, the size of the memory block at address is originalSize, newSize <= originalSize, and release was not called after allocating the memory block at address.

Static Member Functions

Name

Description

throwBadAlloc

Throw std::bad_alloc if exceptions are enabled or abort the program otherwise. Derived classes and helper functions will typically call this function when they are unable to satisfy an allocation request. This function never returns.

Protected Member Functions

Name

Description

do_allocate [virtual]

Return a newly allocated block of memory of (at least) the specified positive bytes and having at least the specified alignment. Unless overriden in a derived class, the return value is this‐>allocate(bytes). If this allocator cannot return the requested number of bytes or cannot satisfy the alignment request, then it will throw a std::bad_alloc exception in an exception‐enabled build, or else will abort the program in a non‐exception build. Unless overriden in a derived class, this function will forward the allocation request to the allocate virtual function, padding bytes and adjusting the return value as necessary to ensure sufficient alignment. Note that if bytes is 0, the same non‐null value will be returned every time.

do_deallocate [virtual]

Return the memory block at the specified p address, having the specified bytes and specified alignment, back to this allocator. Unless overriden in a derived class, this function will forward the deallocation request to the deallocate virtual function, padding bytes and adjusting p as necessary to account for alignment values other than the natural alignment for an object of size bytes. The behavior is undefined unless address is a block allocated from this allocator object using the same bytes and alignment and not already deallocated.

do_is_equal [virtual]

Return true if this allocator is equal to the specified other allocator, meaning (at least) that a memory block allocated by one can be deallocated by the other; otherwise return false. Unless overriden, this method returns this == &other.

Created with MrDocs