内存对齐QVector()。data()

时间:2015-08-20 09:28:19

标签: qt qt5 vectorization memory-alignment auto-vectorization

我正在使用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 个答案:

答案 0 :(得分:4)

我想到了两个解决方案:

  1. 忘掉它:使用std::vector和合适的分配器。 QVector的数据有效负载分配有alignof(T)。¹
  2. SIMD处理的32字节对齐气味,因此您可以使用QVector<__m256i>或类似的reinterpret_cast进出。
  3. ¹不完全正确,请参阅http://thread.gmane.org/gmane.comp.lib.qt.devel/22326/focus=22596