std :: aligned_alloc和C ++ 17中新增的对齐运算符

时间:2018-11-26 16:47:56

标签: memory-management c++17 memory-alignment

我对C ++ 17中新增的std :: aligned_alloc和aligned运算符有疑问。

我是否正确理解operator new的对齐版本仅适用于声明为对齐的对象?即

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

只有new aligned_shorts[7]才会导致内存对齐?

但是如果我想要一个对齐的动态数组该怎么办。 e ints?

int *aligned_ints;// want aligned dynamic array

可以将std :: aligned_alloc用于此吗?而且,如果我需要过度对齐(例如,进行矢量化处理),则需要整体布局/填充:

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));
} 

0 个答案:

没有答案