我希望我的向量存储能够对齐(比如16字节边界),所以我把这个分配器作为memalign()
的包装器,我想知道这是否是分配对齐内存的正确方法与STL向量。
template <class T , int Alignment=16>
class AlignedAllocator
{
public:
...
pointer allocate (size_type size, const_pointer *hint = 0) {
return (pointer) memalign(Alignment, size*sizeof (T));
};
void deallocate (pointer p, size_type size) {
free(p);
};
...
}
如果没有,是否有适用于STL容器的对齐分配器的可用实现?
PS:我正在使用gcc进行编译。
答案 0 :(得分:1)
函数memalign(3)已过时,请尝试使用posix_memalign(3)。除此之外,假设代码中的...
意味着包含其余所需的分配器元素,则代码看起来很好。
答案 1 :(得分:0)
看起来不错。但是将这些代码移植到BSD和Darwin时会出现问题。 手动编写分配函数要强大得多。
只是新的足够大的块并返回指定的指针。您还需要编写自定义释放函数
答案 2 :(得分:0)
这取决于向量实现,它可能会选择分配稍大一点的缓冲区,并在数据前加上会破坏对齐的内容。