ATLAS Offline Software
Loading...
Searching...
No Matches
SG::ArenaPoolAllocator Class Reference

Pool-based allocator. More...

#include <ArenaPoolAllocator.h>

Inheritance diagram for SG::ArenaPoolAllocator:
Collaboration diagram for SG::ArenaPoolAllocator:

Classes

class  const_iterator
 Const iterator for the pool. More...
class  iterator
 Non-const iterator for the pool. More...

Public Types

typedef char * pointer
 Type for pointers to elements.
typedef const char * const_pointer
 And a const version of the pointer.
typedef void func_t(pointer)
 Type of functions for constructor, etc.

Public Member Functions

 ArenaPoolAllocator (const Params &params)
 Constructor.
virtual ~ArenaPoolAllocator ()
 Destructor.
 ArenaPoolAllocator (const ArenaPoolAllocator &)=delete
 Don't allow copy construction or assignment.
ArenaPoolAllocatoroperator= (const ArenaPoolAllocator &)=delete
 ArenaPoolAllocator (ArenaPoolAllocator &&other)
 Move constructor.
ArenaPoolAllocatoroperator= (ArenaPoolAllocator &&other)
 Move assignment.
void swap (ArenaPoolAllocator &other)
 Swap.
pointer allocate ()
 Allocate a new element.
virtual void reset () override
 Free all allocated elements.
virtual void erase () override final
 Free all allocated elements and release memory back to the system.
void resetTo (pointer p)
 Reset pool back to a previous state.
iterator begin ()
 Starting pool iterator.
const_iterator begin () const
 Starting pool const iterator.
iterator end ()
 Ending pool iterator.
const_iterator end () const
 Ending pool const iterator.
void swap (ArenaBlockAllocatorBase &other)
 Swap.
virtual void reserve (size_t size) override
 Set the total number of elements cached by the allocator.
virtual Stats stats () const override
 Return the statistics block for this allocator.
virtual const std::string & name () const override
 Return the name of this allocator.
const Paramsparams () const
 Return this Allocator's parameters.
void protect ()
 Write-protect the memory managed by this allocator.
void unprotect ()
 Write-enable the memory managed by this allocator.
virtual void report (std::ostream &os) const
 Generate a report on the memory usage of this allocator.

Static Public Member Functions

template<class T>
static func_tmakeConstructor (const std::false_type &)
 Make a constructor function pointer for a non-trivial constructor.
template<class T>
static func_tmakeConstructor (const std::true_type &)
 Make a constructor function pointer for a trivial constructor.
template<class T>
static func_tmakeDestructor (const std::false_type &)
 Make a constructor function pointer for a non-trivial destructor.
template<class T>
static func_tmakeDestructor (const std::true_type &)
 Make a constructor function pointer for a trivial destructor.
template<class T>
static func_tmakeClear (const std::false_type &)
 Make a function pointer for a clear function.
template<class T>
static func_tmakeClear (const std::true_type &)
 Make a dummy clear function pointer.

Protected Member Functions

ArenaBlockgetBlock ()
 Return an empty block, either newly-allocated or from the free list.
void eraseUnprotected ()
 Free all allocated elements and release memory back to the system.

Protected Attributes

Params m_params
 The parameters for this allocator.
ArenaBlockm_blocks
 The list of blocks currently in use.
ArenaBlockm_freeblocks
 The list of free blocks.
ArenaAllocatorBase::Stats m_stats
 The statistics structure.
bool m_protected
 Flag whether the arena has been protected.

Private Member Functions

void refill ()
 Add more free elements to the pool.
void clearBlock ()
 Reset all elements in the topmost block, and move the block to the free list.

Static Private Member Functions

template<typename T>
static void construct_fcn (pointer p)
 Call T's default constructor on the object at p.
template<typename T>
static void destroy_fcn (pointer p)
 Call T's destructor on the object at p.
template<typename T>
static void clear_fcn (pointer p)
 Call T::clear on the object at p.

Private Attributes

pointer m_ptr
 Pointer to the next free element to allocate, or null.
pointer m_end
 One past the last available element in the current block, of null.

Detailed Description

Pool-based allocator.

See Arena.h for an overview of the arena-based memory allocators.

This is a block-based memory allocator, with stack-like behavior (like the DataPool class). We do not allow freeing individual elements; instead, we support resetTo(p), which frees and all elements allocated after it (in this allocator). We also implement an iterator over the allocated blocks.

Definition at line 38 of file ArenaPoolAllocator.h.

Member Typedef Documentation

◆ const_pointer

typedef const char* SG::ArenaAllocatorBase::const_pointer
inherited

And a const version of the pointer.

Definition at line 140 of file ArenaAllocatorBase.h.

◆ func_t

typedef void SG::ArenaAllocatorBase::func_t(pointer)
inherited

Type of functions for constructor, etc.

Definition at line 143 of file ArenaAllocatorBase.h.

◆ pointer

typedef char* SG::ArenaAllocatorBase::pointer
inherited

Type for pointers to elements.

Definition at line 137 of file ArenaAllocatorBase.h.

Constructor & Destructor Documentation

◆ ArenaPoolAllocator() [1/3]

SG::ArenaPoolAllocator::ArenaPoolAllocator ( const Params & params)

Constructor.

Parameters
paramsThe parameters structure for this allocator. See ArenaAllocatorBase.h for the contents.

Definition at line 97 of file ArenaPoolAllocator.cxx.

99 m_ptr (nullptr),
100 m_end (nullptr)
101{
102}
const Params & params() const
Return this Allocator's parameters.
ArenaBlockAllocatorBase(const Params &params)
Constructor.
pointer m_end
One past the last available element in the current block, of null.
pointer m_ptr
Pointer to the next free element to allocate, or null.

◆ ~ArenaPoolAllocator()

SG::ArenaPoolAllocator::~ArenaPoolAllocator ( )
virtual

Destructor.

This will free all the Allocator's storage.

Definition at line 108 of file ArenaPoolAllocator.cxx.

109{
110 if (m_protected) {
111 try {
112 unprotect();
113 }
114 catch (const SG::ExcProtection&) {
115 // Got an error from mprotect...
116 std::abort();
117 }
118 }
120}
void unprotect()
Write-enable the memory managed by this allocator.
void eraseUnprotected()
Free all allocated elements and release memory back to the system.
bool m_protected
Flag whether the arena has been protected.

◆ ArenaPoolAllocator() [2/3]

SG::ArenaPoolAllocator::ArenaPoolAllocator ( const ArenaPoolAllocator & )
delete

Don't allow copy construction or assignment.

◆ ArenaPoolAllocator() [3/3]

SG::ArenaPoolAllocator::ArenaPoolAllocator ( ArenaPoolAllocator && other)

Move constructor.

Definition at line 126 of file ArenaPoolAllocator.cxx.

128 : ArenaBlockAllocatorBase (std::move (other)),
129 m_ptr (other.m_ptr),
130 m_end (other.m_end)
131{
132 // False positives
133 // cppcheck-suppress useInitializationList
134 other.m_ptr = nullptr;
135 // cppcheck-suppress useInitializationList
136 other.m_end = nullptr;
137}

Member Function Documentation

◆ allocate()

pointer SG::ArenaPoolAllocator::allocate ( )

Allocate a new element.

The fast path of this will be completely inlined.

◆ begin() [1/2]

ArenaPoolAllocator::iterator SG::ArenaPoolAllocator::begin ( )

Starting pool iterator.

This will iterate over all allocated elements (in unspecified order). It is a forward_iterator.

Definition at line 271 of file ArenaPoolAllocator.cxx.

272{
273 // If @c m_ptr is one set, it is one more than the last allocated element.
274 return iterator (m_ptr ? m_ptr - m_params.eltSize : nullptr, m_blocks);
275}
ArenaBlock * m_blocks
The list of blocks currently in use.
Params m_params
The parameters for this allocator.
Non-const iterator for the pool.

◆ begin() [2/2]

ArenaPoolAllocator::const_iterator SG::ArenaPoolAllocator::begin ( ) const

Starting pool const iterator.

This will iterate over all allocated elements (in unspecified order). It is a forward_iterator.

Definition at line 284 of file ArenaPoolAllocator.cxx.

285{
286 // If @c m_ptr is one set, it is one more than the last allocated element.
287 return const_iterator (m_ptr ? m_ptr - m_params.eltSize : nullptr, m_blocks);
288}

◆ clear_fcn()

template<typename T>
void SG::ArenaAllocatorBase::clear_fcn ( pointer p)
staticprivateinherited

Call T::clear on the object at p.

Parameters
pThe object on which to run the clear.

◆ clearBlock()

void SG::ArenaPoolAllocator::clearBlock ( )
private

Reset all elements in the topmost block, and move the block to the free list.

Definition at line 329 of file ArenaPoolAllocator.cxx.

330{
331 // The topmost block.
332 ArenaBlock* p = m_blocks;
333
334 // Nothing to do if there are no allocated blocks!
335 if (!p) return;
336
337 size_t elt_size = p->eltSize();
338
339 // The first element of the block.
340 pointer base = p->index(0, elt_size);
341
342 // Do we need to call @c clear? If so, call it on all allocated elements
343 // in this block.
344 func_t* clear = m_params.clear;
345 if (clear) {
346 pointer elt = base;
347 while (elt < m_ptr) {
348 clear (elt);
349 elt += elt_size;
350 }
351 }
352
353 // Update statistics.
354 --m_stats.blocks.inuse;
355 ++m_stats.blocks.free;
356 m_stats.elts.inuse -= (m_ptr - base) / elt_size;
357
358 // Move the block from the allocated to the free list.
359 m_blocks = p->link();
360 p->link() = m_freeblocks;
361 m_freeblocks = p;
362 p = m_blocks;
363
364 // Reset the pointers.
365 if (p) {
366 m_ptr = m_end = p->index(p->size());
367 }
368 else {
369 m_ptr = m_end = nullptr;
370 }
371}
char * pointer
Type for pointers to elements.
void func_t(pointer)
Type of functions for constructor, etc.
ArenaAllocatorBase::Stats m_stats
The statistics structure.
ArenaBlock * m_freeblocks
The list of free blocks.
std::string base
Definition hcg.cxx:81

◆ construct_fcn()

template<typename T>
void SG::ArenaAllocatorBase::construct_fcn ( pointer p)
staticprivateinherited

Call T's default constructor on the object at p.

Parameters
pThe object on which to run the constructor.

◆ destroy_fcn()

template<typename T>
void SG::ArenaAllocatorBase::destroy_fcn ( pointer p)
staticprivateinherited

Call T's destructor on the object at p.

Parameters
pThe object on which to run the destructor.

◆ end() [1/2]

ArenaPoolAllocator::iterator SG::ArenaPoolAllocator::end ( )

Ending pool iterator.

Definition at line 294 of file ArenaPoolAllocator.cxx.

295{
296 // Use a null iterator to signal the end.
297 return iterator ();
298}

◆ end() [2/2]

ArenaPoolAllocator::const_iterator SG::ArenaPoolAllocator::end ( ) const

Ending pool const iterator.

Definition at line 304 of file ArenaPoolAllocator.cxx.

305{
306 // Use a null iterator to signal the end.
307 return const_iterator ();
308}

◆ erase()

void SG::ArenaPoolAllocator::erase ( )
finaloverridevirtual

Free all allocated elements and release memory back to the system.

All elements allocated are freed, and all allocated blocks of memory are released back to the system. destructor should be called on them if it was provided (preceded by clear if provided and mustClear was set).

Reimplemented from SG::ArenaBlockAllocatorBase.

Definition at line 201 of file ArenaPoolAllocator.cxx.

202{
203 // Delete all the blocks.
205
206 // Reset pointers.
207 m_ptr = m_end = nullptr;
208}
virtual void erase() override
Free all allocated elements and release memory back to the system.

◆ eraseUnprotected()

void SG::ArenaBlockAllocatorBase::eraseUnprotected ( )
protectedinherited

Free all allocated elements and release memory back to the system.

Assumes that the blocks are already unprotected.

Definition at line 186 of file ArenaBlockAllocatorBase.cxx.

187{
188 // Do we need to run clear() on the allocated elements?
189 // If so, do so via reset().
190 if (m_params.mustClear && m_params.clear) {
191 reset();
192 }
193
194 // Kill the block lists (both free and in use).
197 m_blocks = m_freeblocks = nullptr;
198
199 // Reset statistics.
200 m_stats.clear();
201}
virtual void reset()=0
Free all allocated elements.
static void destroyList(ArenaBlock *p, func_t *dtor)
Destroy all blocks in a list.

◆ getBlock()

ArenaBlock * SG::ArenaBlockAllocatorBase::getBlock ( )
protectedinherited

Return an empty block, either newly-allocated or from the free list.

Update statistics appropriately.

Definition at line 245 of file ArenaBlockAllocatorBase.cxx.

246{
247 if (m_protected) {
248 throw SG::ExcProtected();
249 }
250
251 ArenaBlock* newblock = m_freeblocks;
252 if (newblock) {
253 // There's something on the free list. Remove it and update statistics.
254 m_freeblocks = newblock->link();
255 --m_stats.blocks.free;
256 }
257 else {
258 // Otherwise, we need to make a new block.
259 newblock = ArenaBlock::newBlock (m_params.nblock, m_params.eltSize,
260 m_params.constructor);
261 m_stats.elts.total += newblock->size();
262 ++m_stats.blocks.total;
263 }
264 // Finish updating statistics.
265 // (Remaining ones are computed in stats().)
266 ++m_stats.blocks.inuse;
267
268 // Link it into the in-use list and return.
269 newblock->link() = m_blocks;
270 m_blocks = newblock;
271 return newblock;
272}
static ArenaBlock * newBlock(size_t n, size_t elt_size, func_t *ctor)
Create a new block.

◆ makeClear() [1/2]

template<class T>
func_t * SG::ArenaAllocatorBase::makeClear ( const std::false_type & )
staticinherited

Make a function pointer for a clear function.

◆ makeClear() [2/2]

template<class T>
func_t * SG::ArenaAllocatorBase::makeClear ( const std::true_type & )
staticinherited

Make a dummy clear function pointer.

◆ makeConstructor() [1/2]

template<class T>
func_t * SG::ArenaAllocatorBase::makeConstructor ( const std::false_type & )
staticinherited

Make a constructor function pointer for a non-trivial constructor.

◆ makeConstructor() [2/2]

template<class T>
func_t * SG::ArenaAllocatorBase::makeConstructor ( const std::true_type & )
staticinherited

Make a constructor function pointer for a trivial constructor.

◆ makeDestructor() [1/2]

template<class T>
func_t * SG::ArenaAllocatorBase::makeDestructor ( const std::false_type & )
staticinherited

Make a constructor function pointer for a non-trivial destructor.

◆ makeDestructor() [2/2]

template<class T>
func_t * SG::ArenaAllocatorBase::makeDestructor ( const std::true_type & )
staticinherited

Make a constructor function pointer for a trivial destructor.

◆ name()

const std::string & SG::ArenaBlockAllocatorBase::name ( ) const
overridevirtualinherited

Return the name of this allocator.

Implements SG::ArenaAllocatorBase.

Definition at line 225 of file ArenaBlockAllocatorBase.cxx.

226{
227 return m_params.name;
228}

◆ operator=() [1/2]

ArenaPoolAllocator & SG::ArenaPoolAllocator::operator= ( ArenaPoolAllocator && other)

Move assignment.

Definition at line 144 of file ArenaPoolAllocator.cxx.

146{
147 if (this != &other) {
148 ArenaBlockAllocatorBase::operator= (std::move (other));
149 m_ptr = other.m_ptr;
150 m_end = other.m_end;
151 other.m_ptr = nullptr;
152 other.m_end = nullptr;
153 }
154 return *this;
155}
ArenaBlockAllocatorBase & operator=(const ArenaBlockAllocatorBase &)=delete

◆ operator=() [2/2]

ArenaPoolAllocator & SG::ArenaPoolAllocator::operator= ( const ArenaPoolAllocator & )
delete

◆ params()

const ArenaAllocatorBase::Params & SG::ArenaBlockAllocatorBase::params ( ) const
inherited

Return this Allocator's parameters.

Return this allocator's parameters.

Definition at line 235 of file ArenaBlockAllocatorBase.cxx.

236{
237 return m_params;
238}

◆ protect()

void SG::ArenaBlockAllocatorBase::protect ( )
inherited

Write-protect the memory managed by this allocator.

Adjust protection on the memory managed by this allocator to disallow writes.

Definition at line 281 of file ArenaBlockAllocatorBase.cxx.

282{
284 m_protected = true;
285}
static void protectList(ArenaBlock *p)
Write-protect all blocks in a list.

◆ refill()

void SG::ArenaPoolAllocator::refill ( )
private

Add more free elements to the pool.

Definition at line 314 of file ArenaPoolAllocator.cxx.

315{
316 // Get a new block.
317 ArenaBlock* newblock = getBlock();
318
319 // Set the pointers.
320 m_ptr = newblock->index (0, m_params.eltSize);
321 m_end = newblock->index (newblock->size(), m_params.eltSize);
322}
ArenaBlock * getBlock()
Return an empty block, either newly-allocated or from the free list.

◆ report()

void SG::ArenaAllocatorBase::report ( std::ostream & os) const
virtualinherited

Generate a report on the memory usage of this allocator.

Parameters
osStream to which the report should be written.

Definition at line 130 of file ArenaAllocatorBase.cxx.

131{
132 os << " " << stats() << " " << name() << std::endl;
133}
virtual const std::string & name() const =0
Return the name of this allocator.
virtual Stats stats() const =0
Return the statistics block for this allocator.

◆ reserve()

void SG::ArenaBlockAllocatorBase::reserve ( size_t size)
overridevirtualinherited

Set the total number of elements cached by the allocator.

Parameters
sizeThe desired pool size.

This allows changing the number of elements that are currently free but cached. Any allocated elements are not affected by this call.

If size is greater than the total number of elements currently cached, then more will be allocated. This will preferably done with a single block, but that is not guaranteed; in addition, the allocator may allocate more elements than is requested.

If size is smaller than the total number of elements currently cached, as many blocks as possible will be released back to the system. It may not be possible to release the number of elements requested; this should be implemented on a best-effort basis.

Implements SG::ArenaAllocatorBase.

Definition at line 120 of file ArenaBlockAllocatorBase.cxx.

121{
122 if (m_protected) {
123 throw SG::ExcProtected();
124 }
125 if (size > m_stats.elts.total) {
126 // Growing the pool.
127 // Make a new block of the required size.
128 size_t sz = size - m_stats.elts.total;
129 ArenaBlock* newblock = ArenaBlock::newBlock (sz, m_params.eltSize,
130 m_params.constructor);
131
132 // Update statistics (others are derived in stats()).
133 ++m_stats.blocks.free;
134 ++m_stats.blocks.total;
135 m_stats.elts.total += newblock->size();
136
137 // Add to the free list.
138 newblock->link() = m_freeblocks;
139 m_freeblocks = newblock;
140 }
141 else {
142 // Shrinking the pool.
143 // Loop while we can get rid of the first free block.
144 while (size < m_stats.elts.total &&
145 m_freeblocks &&
146 m_freeblocks->size() <= (m_stats.elts.total - size))
147 {
148 // Remove it from the free list.
149 ArenaBlock* p = m_freeblocks;
150 m_freeblocks = m_freeblocks->link();
151
152 // Update statistics (others are derived in stats()).
153 m_stats.elts.total -= p->size();
154 --m_stats.blocks.free;
155 --m_stats.blocks.total;
156
157 // Free the block.
158 ArenaBlock::destroy (p, m_params.destructor);
159 }
160 }
161}
static Double_t sz
static void destroy(ArenaBlock *p, func_t *dtor)
Destroy a block.

◆ reset()

void SG::ArenaPoolAllocator::reset ( )
overridevirtual

Free all allocated elements.

All elements allocated are returned to the free state. clear should be called on them if it was provided. The elements may continue to be cached internally, without returning to the system.

Implements SG::ArenaAllocatorBase.

Definition at line 179 of file ArenaPoolAllocator.cxx.

180{
181 // Clear each block in turn.
182 while (m_blocks) {
183 clearBlock();
184 }
185
186 // Check that things are consistent.
187 assert (m_stats.elts.inuse == 0);
188 assert (m_ptr == nullptr);
189 assert (m_end == nullptr);
190}
void clearBlock()
Reset all elements in the topmost block, and move the block to the free list.

◆ resetTo()

void SG::ArenaPoolAllocator::resetTo ( pointer blk)

Reset pool back to a previous state.

Parameters
pThe pointer back to which to reset.

This will free (a la reset) the element p and all elements that have been allocated after it from this allocator.

Parameters
blkThe pointer back to which to reset.

This will free (a la reset) the element p and all elements that have been allocated after it from this allocator.

Definition at line 218 of file ArenaPoolAllocator.cxx.

219{
220 // Clear the topmost block, as long as it doesn't contain the sought-after
221 // pointer.
222 ArenaBlock* p = m_blocks;
223 assert (p != nullptr);
224 size_t elt_size = p->eltSize();
225 while (p && !(blk >= p->index(0, elt_size) &&
226 blk < p->index(p->size(), elt_size)))
227 {
228 clearBlock();
229 p = m_blocks;
230 }
231
232 // We'll trip this if the supplied pointer wasn't in any block.
233 assert (p != nullptr);
234
235 // If the element is at the beginning of this block, just clear the whole
236 // thing.
237 if (blk == p->index(0, elt_size)) {
238 clearBlock();
239 }
240 else {
241 // Otherwise, we need to clear some of the elements in this block.
242 // See if we need to call @c clear.
243 func_t* clear = m_params.clear;
244 if (clear) {
245 // Yeah, we do. Call @c clear on each element in turn.
246 while (m_ptr > blk) {
247 m_ptr -= elt_size;
248 clear (m_ptr);
249 --m_stats.elts.inuse;
250 }
251 // We'll trip this if the supplied pointer wasn't on an element
252 // boundary.
253 assert (m_ptr == blk);
254 }
255 else {
256 // We don't need to call @c clear.
257 // So we can do it the fast way --- just reset pointers.
258 m_stats.elts.inuse -= (m_ptr - blk) / elt_size;
259 m_ptr = blk;
260 }
261 }
262}
str index
Definition DeMoScan.py:362

◆ stats()

ArenaAllocatorBase::Stats SG::ArenaBlockAllocatorBase::stats ( ) const
overridevirtualinherited

Return the statistics block for this allocator.

Implements SG::ArenaAllocatorBase.

Definition at line 207 of file ArenaBlockAllocatorBase.cxx.

208{
209 // Calculate derived statistics.
211 stats.elts.free = stats.elts.total - stats.elts.inuse;
212 stats.bytes.inuse = stats.elts.inuse * m_params.eltSize +
213 stats.blocks.inuse * ArenaBlock::overhead();
214 stats.bytes.total = stats.elts.total * m_params.eltSize +
215 stats.blocks.total * ArenaBlock::overhead();
216 stats.bytes.free = stats.elts.free * m_params.eltSize +
217 stats.blocks.free * ArenaBlock::overhead();
218 return stats;
219}
virtual Stats stats() const override
Return the statistics block for this allocator.
static size_t overhead()
Return the per-block memory overhead, in bytes.
Statistics for an allocator.

◆ swap() [1/2]

void SG::ArenaBlockAllocatorBase::swap ( ArenaBlockAllocatorBase & other)
inherited

Swap.

Definition at line 91 of file ArenaBlockAllocatorBase.cxx.

92{
93 if (this != &other) {
94 std::swap (m_params, other.m_params);
95 std::swap (m_blocks, other.m_blocks);
96 std::swap (m_freeblocks, other.m_freeblocks);
97 std::swap (m_stats, other.m_stats);
98 std::swap (m_protected, other.m_protected);
99 }
100}
void swap(ElementLinkVector< DOBJ > &lhs, ElementLinkVector< DOBJ > &rhs)

◆ swap() [2/2]

void SG::ArenaPoolAllocator::swap ( ArenaPoolAllocator & other)

Swap.

Definition at line 161 of file ArenaPoolAllocator.cxx.

162{
163 if (this != &other) {
165 std::swap (m_ptr, other.m_ptr);
166 std::swap (m_end, other.m_end);
167 }
168}
void swap(ArenaBlockAllocatorBase &other)
Swap.

◆ unprotect()

void SG::ArenaBlockAllocatorBase::unprotect ( )
inherited

Write-enable the memory managed by this allocator.

Adjust protection on the memory managed by this allocator to allow writes.

Definition at line 294 of file ArenaBlockAllocatorBase.cxx.

295{
296 if (m_protected) {
298 m_protected = false;
299 }
300}
static void unprotectList(ArenaBlock *p)
Write-enable all blocks in a list.

Member Data Documentation

◆ m_blocks

ArenaBlock* SG::ArenaBlockAllocatorBase::m_blocks
protectedinherited

The list of blocks currently in use.

Definition at line 161 of file ArenaBlockAllocatorBase.h.

◆ m_end

pointer SG::ArenaPoolAllocator::m_end
private

One past the last available element in the current block, of null.

Definition at line 265 of file ArenaPoolAllocator.h.

◆ m_freeblocks

ArenaBlock* SG::ArenaBlockAllocatorBase::m_freeblocks
protectedinherited

The list of free blocks.

Definition at line 164 of file ArenaBlockAllocatorBase.h.

◆ m_params

Params SG::ArenaBlockAllocatorBase::m_params
protectedinherited

The parameters for this allocator.

Definition at line 158 of file ArenaBlockAllocatorBase.h.

◆ m_protected

bool SG::ArenaBlockAllocatorBase::m_protected
protectedinherited

Flag whether the arena has been protected.

Definition at line 170 of file ArenaBlockAllocatorBase.h.

◆ m_ptr

pointer SG::ArenaPoolAllocator::m_ptr
private

Pointer to the next free element to allocate, or null.

Definition at line 262 of file ArenaPoolAllocator.h.

◆ m_stats

ArenaAllocatorBase::Stats SG::ArenaBlockAllocatorBase::m_stats
protectedinherited

The statistics structure.

Definition at line 167 of file ArenaBlockAllocatorBase.h.


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