如何对齐结构数组,每个结构都需要对齐(SSE)

时间:2013-07-31 19:27:24

标签: c++ malloc memory-alignment

我有struct alignedStruct需要特殊对齐(SEE分机):

void* operator new(size_t i) { return _aligned_malloc(i, 16); }
void operator delete(void* p) { _aligned_free(p); }

此对齐适用于alignedStruct的唯一对象/指针,但之后我尝试这样做:

alignedStruct * arr = new alignedStruct[count];

我的应用程序崩溃,问题肯定是“数组的对齐”(完全在前一行):

0xC0000005: Access violation reading location 0xFFFFFFFF.

这种崩溃发生在约60%的时间,也表明问题不典型。

1 个答案:

答案 0 :(得分:2)

我相信您正在寻找的是placement new,它允许您正确使用_aligned_malloc和构造函数。或者,你可以overload operator new[] and operator delete[]

void* operator new[] (std::size_t size)
{
   void * mem = _aligned_malloc(size, 16);
   if(mem == nullptr)
      throw std::bad_alloc;
   return mem;
}