ATLAS Offline Software
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
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. More...
 
typedef const char * const_pointer
 And a const version of the pointer. More...
 
typedef void func_t(pointer)
 Type of functions for constructor, etc. More...
 

Public Member Functions

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

Static Public Member Functions

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

Protected Member Functions

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

Protected Attributes

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

Private Member Functions

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

Static Private Member Functions

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

Private Attributes

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

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

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 }

◆ ~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 }

◆ 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 }

◆ 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 >
static 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.
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 }

◆ construct_fcn()

template<typename T >
static 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 >
static 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 }

◆ 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 }

◆ 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.
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 }

◆ makeClear() [1/2]

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

Make a function pointer for a clear function.

◆ makeClear() [2/2]

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

Make a dummy clear function pointer.

◆ makeConstructor() [1/2]

template<class T >
static 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 >
static 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 >
static 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 >
static 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) {
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 }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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,
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 &&
147  {
148  // Remove it from the free list.
149  ArenaBlock* p = m_freeblocks;
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.
159  }
160  }
161 }

◆ 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 }

◆ 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.
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 }

◆ 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.
210  Stats stats = m_stats;
218  return stats;
219 }

◆ 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 }

◆ 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 }

◆ 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 }

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:
SG::ArenaBlockAllocatorBase::params
const Params & params() const
Return this Allocator's parameters.
Definition: ArenaBlockAllocatorBase.cxx:235
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
base
std::string base
Definition: hcg.cxx:78
SG::ArenaBlockAllocatorBase::m_blocks
ArenaBlock * m_blocks
The list of blocks currently in use.
Definition: ArenaBlockAllocatorBase.h:161
SG::ArenaAllocatorBase::Params::constructor
func_t * constructor
Constructor function for elements.
Definition: ArenaAllocatorBase.h:170
SG::ExcProtection
Exception — Attempt to change memory protection failed.
Definition: Control/AthAllocators/AthAllocators/exceptions.h:43
SG::ArenaAllocatorBase::stats
virtual Stats stats() const =0
Return the statistics block for this allocator.
fitman.sz
sz
Definition: fitman.py:527
SG::ArenaBlockAllocatorBase::getBlock
ArenaBlock * getBlock()
Return an empty block, either newly-allocated or from the free list.
Definition: ArenaBlockAllocatorBase.cxx:245
SG::ArenaBlock::destroy
static void destroy(ArenaBlock *p, func_t *dtor)
Destroy a block.
Definition: ArenaBlock.cxx:71
SG::ArenaAllocatorBase::Params::nblock
size_t nblock
The number of elements we should allocate in a single block (hint only).
Definition: ArenaAllocatorBase.h:162
index
Definition: index.py:1
SG::ArenaAllocatorBase::Params::mustClear
bool mustClear
If true, the clear call cannot be skipped before destructor.
Definition: ArenaAllocatorBase.h:181
SG::ArenaBlockAllocatorBase::m_params
Params m_params
The parameters for this allocator.
Definition: ArenaBlockAllocatorBase.h:158
SG::ArenaBlock::overhead
static size_t overhead()
Return the per-block memory overhead, in bytes.
Definition: ArenaBlock.cxx:159
SG::ArenaBlock::newBlock
static ArenaBlock * newBlock(size_t n, size_t elt_size, func_t *ctor)
Create a new block.
Definition: ArenaBlock.cxx:42
SG::ArenaBlockAllocatorBase::erase
virtual void erase() override
Free all allocated elements and release memory back to the system.
Definition: ArenaBlockAllocatorBase.cxx:172
SG::ArenaAllocatorBase::Stats::Stat::free
size_t free
Number of items currently not allocated by the application but cached by the allocator.
Definition: ArenaAllocatorBase.h:205
SG::ArenaAllocatorBase::Params::clear
func_t * clear
Clear function for elements.
Definition: ArenaAllocatorBase.h:175
SG::ArenaBlockAllocatorBase::m_protected
bool m_protected
Flag whether the arena has been protected.
Definition: ArenaBlockAllocatorBase.h:170
SG::ArenaAllocatorBase::Stats::Stat::inuse
size_t inuse
Number of items currently allocated by the application.
Definition: ArenaAllocatorBase.h:202
SG::ArenaAllocatorBase::Stats::blocks
Stat blocks
Counts of blocks.
Definition: ArenaAllocatorBase.h:217
SG::ArenaBlock::unprotectList
static void unprotectList(ArenaBlock *p)
Write-enable all blocks in a list.
Definition: ArenaBlock.cxx:220
SG::ArenaBlock::link
ArenaBlock *& link()
Return the link pointer of the block.
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
SG::ArenaAllocatorBase::func_t
void func_t(pointer)
Type of functions for constructor, etc.
Definition: ArenaAllocatorBase.h:143
SG::ArenaBlockAllocatorBase::ArenaBlockAllocatorBase
ArenaBlockAllocatorBase(const Params &params)
Constructor.
Definition: ArenaBlockAllocatorBase.cxx:25
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
SG::ArenaAllocatorBase::Stats::clear
void clear()
Reset to zero.
Definition: ArenaAllocatorBase.cxx:77
SG::ArenaPoolAllocator::m_end
pointer m_end
One past the last available element in the current block, of null.
Definition: ArenaPoolAllocator.h:265
SG::ArenaPoolAllocator::clearBlock
void clearBlock()
Reset all elements in the topmost block, and move the block to the free list.
Definition: ArenaPoolAllocator.cxx:329
SG::ArenaBlockAllocatorBase::stats
virtual Stats stats() const override
Return the statistics block for this allocator.
Definition: ArenaBlockAllocatorBase.cxx:207
SG::ArenaBlock::size
size_t size() const
Return the number of elements in the block.
SG::ArenaPoolAllocator::m_ptr
pointer m_ptr
Pointer to the next free element to allocate, or null.
Definition: ArenaPoolAllocator.h:262
WriteCalibToCool.swap
swap
Definition: WriteCalibToCool.py:94
SG::ArenaBlockAllocatorBase::eraseUnprotected
void eraseUnprotected()
Free all allocated elements and release memory back to the system.
Definition: ArenaBlockAllocatorBase.cxx:186
SG::ArenaAllocatorBase::Params::name
std::string name
The name of this allocator.
Definition: ArenaAllocatorBase.h:152
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
SG::ExcProtected
Exception — Attempt to change protected arena.
Definition: Control/AthAllocators/AthAllocators/exceptions.h:58
SG::ArenaAllocatorBase::Stats::bytes
Stat bytes
Counts of bytes.
Definition: ArenaAllocatorBase.h:221
SG::ArenaBlockAllocatorBase::operator=
ArenaBlockAllocatorBase & operator=(const ArenaBlockAllocatorBase &)=delete
SG::ArenaAllocatorBase::Stats::Stat::total
size_t total
Total number of items held by the allocator.
Definition: ArenaAllocatorBase.h:207
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
VKalVrtAthena::varHolder_detail::clear
void clear(T &var)
Definition: NtupleVars.h:48
SG::ArenaBlockAllocatorBase::m_stats
ArenaAllocatorBase::Stats m_stats
The statistics structure.
Definition: ArenaBlockAllocatorBase.h:167
SG::ArenaBlock::protectList
static void protectList(ArenaBlock *p)
Write-protect all blocks in a list.
Definition: ArenaBlock.cxx:205
SG::ArenaBlock::destroyList
static void destroyList(ArenaBlock *p, func_t *dtor)
Destroy all blocks in a list.
Definition: ArenaBlock.cxx:93
SG::ArenaBlockAllocatorBase::unprotect
void unprotect()
Write-enable the memory managed by this allocator.
Definition: ArenaBlockAllocatorBase.cxx:294
SG::ArenaBlockAllocatorBase::swap
void swap(ArenaBlockAllocatorBase &other)
Swap.
Definition: ArenaBlockAllocatorBase.cxx:91
SG::ArenaBlockAllocatorBase::m_freeblocks
ArenaBlock * m_freeblocks
The list of free blocks.
Definition: ArenaBlockAllocatorBase.h:164
SG::ArenaAllocatorBase::Params::eltSize
size_t eltSize
The size in bytes of the individual elements we're allocating.
Definition: ArenaAllocatorBase.h:155
SG::ArenaAllocatorBase::pointer
char * pointer
Type for pointers to elements.
Definition: ArenaAllocatorBase.h:137
SG::ArenaAllocatorBase::reset
virtual void reset()=0
Free all allocated elements.
SG::ArenaAllocatorBase::Params::destructor
func_t * destructor
Destructor function for elements.
Definition: ArenaAllocatorBase.h:172
SG::ArenaAllocatorBase::Stats::elts
Stat elts
Counts of elements.
Definition: ArenaAllocatorBase.h:219
SG::ArenaAllocatorBase::name
virtual const std::string & name() const =0
Return the name of this allocator.