我在程序中使用 AVX2 内在函数,并在其中一个类中声明一个 __m256i 变量,如下所示:
class A {
protected:
__m256i buffer;
public:
A() {
buffer = _mm256_setzero_si256();
}
};
当我创建 A 的实例时,如果缓冲区的内存位置不是 32 字节对齐,则会出现段错误。有没有办法强制 new 运算符的返回地址或缓冲区的内存地址为 32 字节对齐?
最佳答案
根据评论,由于 alignas
说明符似乎不起作用:
大多数编译器都有内置的对齐分配函数,例如GCC的aligned_alloc
。此函数可以与放置 new 运算符结合使用来创建对齐的对象实例。
例如:
void* ptr = aligned_alloc(32, sizeof(A));
A* a = new(ptr) A;
注意:使用placement new
需要手动调用析构函数,使用delete
不起作用
关于c++ - 如何强制 new 运算符返回的指针为 32 字节对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418384/