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