Search code examples
c++stlstackallocator

Stack-buffer based STL allocator?


I was wondering if it practicable to have an C++ standard library compliant allocator that uses a (fixed sized) buffer that lives on the stack.

Somehow, it seems this question has not been ask this way yet on SO, although it may have been implicitly answered elsewhere.

So basically, it seems, as far as my searches go, that it should be possible to create an allocator that uses a fixed size buffer. Now, on first glance, this should mean that it should also be possible to have an allocator that uses a fixed size buffer that "lives" on the stack, but it does appear, that there is no widespread such implementation around.

Let me give an example of what I mean:

{ ...
  char buf[512];
  typedef ...hmm?... local_allocator; // should use buf
  typedef std::basic_string<char, std::char_traits<char>, local_allocator> lstring;
  lstring str; // string object of max. 512 char
}

How would this be implementable?


The answer to this other question (thanks to R. Martinho Fernandes) links to a stack based allocator from the chromium sources: http://src.chromium.org/viewvc/chrome/trunk/src/base/stack_container.h

However, this class seems extremely peculiar, especially since this StackAllocator does not have a default ctor -- and there I was thinking that every allocator class needs a default ctor.


Solution

  • Apparently, there is a conforming Stack Allocator from one Howard Hinnant.

    It works by using a fixed size buffer (via a referenced arena object) and falling back to the heap if too much space is requested.

    This allocator doesn't have a default ctor, and since Howard says:

    I've updated this article with a new allocator that is fully C++11 conforming.

    I'd say that it is not a requirement for an allocator to have a default ctor.