4

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

4

3 回答 3

1

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

于 2012-07-22T16:01:52.117 回答
0

这取决于向量实现,它可能会选择分配稍大的缓冲区并在您的数据前面添加一些会破坏对齐的东西。

于 2012-07-22T16:15:24.953 回答
0

看起来不错。但是您将在将此类代码移植到 BSD 和 Darwin 时遇到问题。手动编写分配函数要健壮得多。

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

于 2012-07-22T14:23:07.483 回答