c++ - 如何强制 new 运算符返回的指针为 32 字节对齐

标签 c++ new-operator avx2

我在程序中使用 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/

相关文章:

sse - 将 32 位 int 中打包的 8 个 4 位值零扩展到 __m256i 的英特尔矢量指令?

assembly - 使用 AVX-512 或 AVX-2 对大数据进行 1 位计数(总体计数)

c++ - 从可变参数模板类中特化一个函数

c++ - C++ 中变量声明的差异

c++ - 计算机视觉系统中机械臂的 Controller

c++ - 在 Mavericks 上编译 AVX2 程序

c++ - GLSL 着色器不工作。没有编译错误,并且使用了 glUseProgram

c# - C#中的关键字实现

c++ - 放置新运算符是否会禁用默认的新运算符?

c++ - 在 C++ 中删除对象