我正在尝试将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()
这需要
- 返回指针的对齐规范。
- 对齐块的大小。
- 指向已分配内存的指针。
- 分配的内存量。
它返回相应对齐的指针,除非没有足够的空间来满足对齐和大小要求。如果没有足够的空间,函数将返回一个空指针。