8

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

例如:

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

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

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

谁能指出我正确的方向?

4

1 回答 1

6

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

你可能想看看std::align()哪些需要

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

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

于 2014-12-17T20:57:25.810 回答