内存对齐 QVector().data()

Memory aligned QVector().data()

我正在使用 Qt5 编写程序,我需要分配一个 QVector <float>,其 data() 指针 32 字节对齐。

有没有办法在不修改 Qt 库本身的情况下做到这一点?

我的代码看起来像这样:

QVector <float> vec;
vec.resize(n);
float *wricker_ptr = wricker.data(); // this should be 32-byte aligned
for (int i=0; i<n; i++)
{
    wricker_ptr[i] = /* some computed value */;
}

我正在使用英特尔的 C++ 编译器。

想到了两个解决方案:

  1. 算了吧: 使用 std::vector 和合适的分配器。 QVector 的数据负载分配给 alignof(T)
  2. SIMD 处理的 32 字节对齐味道,因此您可以使用 QVector<__m256i> 或类似的 reinterpret_cast 进出。

¹ 不完全正确,参见 http://thread.gmane.org/gmane.comp.lib.qt.devel/22326/focus=22596