Я пытаюсь использовать alignas
для указателей, являющихся членами класса, и, честно говоря, я не уверен, где я должен его поместить.Борьба с синтаксисом alignas
Например:
class A
{
private:
int n;
alignas(64) double* ptr;
public:
A(const int num) : n(num), ptr(new double[num])
{}
};
, который я надеялся бы обеспечить данные для PTR был выровнен по 64-байтный блок с. Использование компилятора Intel это не так.
Может ли кто-нибудь указать мне в правильном направлении, пожалуйста?
Кажется, [работает для меня] (http://rextester.com/LCVUW98273) (обратите внимание на необычно большой размер 'A'). Или вы надеялись, что данные 'ptr' будут указывать ** на **, будут выровнены? Это потребует нарушения причинности. –
Возможно, ваш компилятор не поддерживает выравнивание 64? – Brian
Спасибо, Игорь, это показывает источник моего недоразумения. Указатель выровнен, а не данные, на которые он указывает. Я надеялся, что блок данных будет выровнен. – user1683586