0

在 Visual C++ 中,我试图动态分配一些 16 字节对齐的内存,以便我可以使用需要内存对齐的 SSE2 函数。现在这就是我分配内存的方式:

boost::shared_array aData(new unsigned char[GetSomeSizeToAllocate()]);

我知道我可以使用 _aligned_malloc 来分配对齐的内存,但是当它试图释放我的内存时,这会导致 boost 出现问题吗?这是 boost 用于释放内存的代码:

template inline void checked_array_delete(T * x)
{
    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
    (void) sizeof(type_must_be_complete);
    delete [] x;
}

删除释放的内存必须分配新的,对吗?关于如何解决这个问题的任何提示?

4

1 回答 1

1

boost::shared_array有一个构造函数,它接受一个删除器作为第二个参数,而不是 default delete[]

这意味着您也许可以像这样传递合适的释放函数的地址。

boost::shared_array<X> array(allocate_x(100), &deallocate_x);  

参考:Boost.SharedArray

于 2010-10-22T17:49:06.580 回答