Re: Make STL containers allocate aligned memory
On Nov 26, 4:42 pm, zr <zvir...@gmail.com> wrote:
I need to use STL containers that allocate aligned memory.
Why?
My compiler provides an aligned_malloc routine.
It is probably provided by a library shipped with the compiler, not by
compiler itself.
How can this be accomplished?
Something like this:
#include <memory>
#include <stdexcept>
template<class T, size_t alignment>
struct aligned_allocator : std::allocator<T>
{
template<class U>
struct rebind { typedef aligned_allocator<U, alignment> other; };
typedef std::allocator<T> base;
typedef typename base::pointer pointer;
typedef typename base::size_type size_type;
pointer allocate(size_type n)
{
if(pointer p = (pointer)aligned_malloc(n, alignment))
return p;
throw std::bad_alloc("aligned_allocator");
}
pointer allocate(size_type n, void const*)
{
return this->allocate(n);
}
void deallocate(pointer p, size_type)
{
aligned_free(p);
}
};
--
Max