我有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%的时间,也表明问题不典型。
答案 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;
}