使用alignas语法苦苦挣扎

use*_*586 8 c++ icc c++11 alignas

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

例如:

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

public:
    A(const int num) : n(num), ptr(new double[num])
    {}
};
Run Code Online (Sandbox Code Playgroud)

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

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

Die*_*ühl 6

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

您可能想了解std::align()哪些内容

  1. 返回指针对齐的规范.
  2. 对齐块的大小.
  3. 指向已分配内存的指针.
  4. 分配的内存量.

它返回一个相应对齐的指针,除非没有足够的空间来满足对齐和大小要求.如果没有enought空间,则该函数返回空指针.