std :: align_alloc и выровненный оператор new в C ++ 17 - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть вопросы, касающиеся std :: align_alloc и выровненного оператора, нового в C ++ 17.

Правильно ли я понимаю, что выровненная версия operator new работает только с объектами, которые были объявлены выровненными?то есть

struct alignas(16) aligned_shorts
{
short shorts[8];
};

Только тогда new aligned_shorts[7] приведет к выравниванию памяти?

Но что, если я хочу выровненный динамический массив i.e of ints?

int *aligned_ints;// want aligned dynamic array

Может ли для этого использоваться std :: align_alloc?И если мне нужно перестроить (например, для векторизации), мне нужно перераспределить / pad:

int* allocate_aligned_ints(int num, int align_as)
{
int needed_memory=num*sizeof(int);
if((needed_memory% align_as) > 0)//
needed_memory+=(align_as- needed_memory% align_as);//pad if neccessary
return static_cast<int*>(std::aligned_alloc(align_as, needed_memory));
} 
...