У меня есть вопросы, касающиеся 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));
}