...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Pool allocation is a memory allocation scheme that is very fast, but limited in its usage. For more information on pool allocation (also called simple segregated storage, see concepts concepts and Simple Segregated Storage).
Using Pools gives you more control over how memory is used in your program. For example, you could have a situation where you want to allocate a bunch of small objects at one point, and then reach a point in your program where none of them are needed any more. Using pool interfaces, you can choose to run their destructors or just drop them off into oblivion; the pool interface will guarantee that there are no system memory leaks.
Pools are generally used when there is a lot of allocation and deallocation of small objects. Another common usage is the situation above, where many objects may be dropped out of memory.
In general, use Pools when you need a more efficient way to do unusual memory control.
pool_allocator
is a more
general-purpose solution, geared towards efficiently servicing requests for
any number of contiguous chunks.
fast_pool_allocator
is also
a general-purpose solution but is geared towards efficiently servicing requests
for one chunk at a time; it will work for contiguous chunks, but not as well
as pool_allocator.
If you are seriously concerned about performance, use fast_pool_allocator
when dealing with containers such as std::list
,
and use pool_allocator
when
dealing with containers such as std::vector
.