【发布时间】:2015-02-16 12:31:03
【问题描述】:
我正在尝试使用 alignas 作为类成员的指针,坦率地说,我不确定我应该把它放在哪里。
例如:
class A
{
private:
int n;
alignas(64) double* ptr;
public:
A(const int num) : n(num), ptr(new double[num])
{}
};
我希望这能确保 ptr 的数据在 64 字节块上对齐。 使用英特尔编译器,它不会。
谁能指点我正确的方向?
【问题讨论】:
-
似乎是working for me(注意
A的大小非常大)。还是您希望ptr指向 to 的数据会过度对齐?这将需要违反因果关系。 -
也许您的编译器不支持 64 位对齐?
-
感谢伊戈尔,这表明了我误解的根源。指针是对齐的,而不是它指向的数据。我希望数据块会对齐。
-
new的实现怎么可能知道它产生的指针最终会分配给用alignas声明的变量?这就是我所说的违反因果关系的意思——你希望实现能够预测未来。