在对齐语法方面苦苦挣扎



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

例如:

class A
{
private:
    int n;
    alignas(64) double* ptr;    
public:
    A(const int num) : n(num), ptr(new double[num])
    {}
};

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

谁能指出我正确的方向?

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

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

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

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

最新更新