相关疑难解决方法(0)

防止堆上的未对齐数据

我正在构建一个使用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)

c++ alignment visual-c++

9
推荐指数
1
解决办法
3915
查看次数

标签 统计

alignment ×1

c++ ×1

visual-c++ ×1