我正在构建一个使用SSE内在函数的类层次结构,因此该类的一些成员需要16字节对齐.对于我可以使用的堆栈实例__declspec(align(#)),如下所示:
typedef __declspec(align(16)) float Vector[4];
class MyClass{
...
private:
Vector v;
};
Run Code Online (Sandbox Code Playgroud)
现在,因为__declspec(align(#))是一个编译指令,下面的代码可能会导致堆上的未对齐的Vector实例:
MyClass *myclass = new MyClass;
Run Code Online (Sandbox Code Playgroud)
这也是,我知道我可以通过重载新的和删除操作符来轻松解决使用_aligned_malloc和_aligned_free相应的问题.像这样:
//inside MyClass:
public:
void* operator new (size_t size) throw (std::bad_alloc){
void * p = _aligned_malloc(size, 16);
if (p == 0) throw std::bad_alloc()
return p;
}
void operator delete (void *p){
MyClass* pc = static_cast<MyClass*>(p);
_aligned_free(p);
}
...
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好..但这是我的问题.请考虑以下代码:
class NotMyClass{ //Not my code, which I have little or no …Run Code Online (Sandbox Code Playgroud)