内存对齐 QVector().data()

Zac*_*ack 3 qt vectorization memory-alignment qt5 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 */;
}
Run Code Online (Sandbox Code Playgroud)

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

pep*_*ppe 5

我想到了两种解决方案:

\n\n
    \n
  1. 忘记它:使用std::vector合适的分配器。QVector\ 的数据负载分配为alignof(T).\xc2\xb9
  2. \n
  3. 32 字节对齐有 SIMD 处理的味道,因此您可以使用 aQVector<__m256i>或类似的 and reinterpret_castin 和 out。
  4. \n
\n\n

\xc2\xb9 不完全正确,请参阅http://thread.gmane.org/gmane.comp.lib.qt.devel/22326/focus=22596

\n