Я пытаюсь использовать alignas
для указателей, которые являются членами класса, и, честно говоря, я не уверен, где я должен был поставить его.
Например:
class A
{
private:
int n;
alignas(64) double* ptr;
public:
A(const int num) : n(num), ptr(new double[num])
{}
};
Я надеялся, что данные для ptr будут выровнены по 64-байтовому блоку.
Используя компилятор Intel, это не так.
Кто-нибудь может указать мне правильное направление, пожалуйста?
С использованием alignas(N)
Ключевое слово на члена класса вызывает это член быть выровненным в соответствии с указанным выравниванием, а не какой-либо объект, на который потенциально указывается. В конце концов, при инициализации указателя значением отсутствует элемент управления для выравнивания уже существующих объектов.
Возможно, вы захотите взглянуть на std::align()
который занимает
Он возвращает соответственно выровненный указатель, если не хватает места для выполнения требований как выравнивания, так и размера. Если места недостаточно, функция возвращает нулевой указатель.