与STL向量对齐分配

时间:2012-07-22 14:07:29

标签: c++ memory-management memory-alignment

我希望我的向量存储能够对齐(比如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进行编译。

3 个答案:

答案 0 :(得分:1)

函数memalign(3)已过时,请尝试使用posix_memalign(3)。除此之外,假设代码中的...意味着包含其余所需的分配器元素,则代码看起来很好。

答案 1 :(得分:0)

看起来不错。但是将这些代码移植到BSD和Darwin时会出现问题。 手动编写分配函数要强大得多。

只是新的足够大的块并返回指定的指针。您还需要编写自定义释放函数

答案 2 :(得分:0)

这取决于向量实现,它可能会选择分配稍大一点的缓冲区,并在数据前加上会破坏对齐的内容。