使用alignas语法苦苦挣扎

时间:2014-12-17 20:36:07

标签: c++ c++11 icc alignas

我正在尝试使用alignas作为类成员的指针,坦率地说,我不确定我应该把它放在哪里。

例如:

class A
{
private:
    int n;
    alignas(64) double* ptr;    

public:
    A(const int num) : n(num), ptr(new double[num])
    {}
};

我希望确保ptr的数据在64字节块上对齐。 使用英特尔编译器,它没有。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:5)

在类的成员上使用alignas(N)关键字会导致此成员根据指定的对齐方式对齐,而不是可能指向的任何实体。毕竟,在使用值初始化指针时,无法控制已经存在的对象。

您可能需要查看std::align()

  1. 返回指针对齐的规范。
  2. 对齐块的大小。
  3. 指向已分配内存的指针。
  4. 分配的内存量。
  5. 它返回一个相应对齐的指针,除非没有足够的空间来满足对齐和大小要求。如果没有空间,则该函数返回空指针。