内存对齐 QVector().data()

Posted

技术标签:

【中文标题】内存对齐 QVector().data()【英文标题】:Memory aligned QVector().data() 【发布时间】:2015-08-20 09:28:18 【问题描述】:

我正在使用 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 */;

我正在使用 Intel 的 C++ 编译器。

【问题讨论】:

顺便说一句:我找到了这个 5 岁的 thread ,描述了我的确切问题,但它没有包含答案。 不,QVector 无法做到这一点。不是你需要 - 在这种情况下,使用 std::vector 和自定义分配器,例如 aligned_allocator 是要走的路。 【参考方案1】:

想到两个解决方案:

    算了:使用std::vector 和合适的分配器。 QVector 的数据负载分配有alignof(T)。¹ 32 字节对齐有 SIMD 处理的味道,因此您可以使用 QVector&lt;__m256i&gt; 或类似名称以及 reinterpret_cast 进出。

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

【讨论】:

以上是关于内存对齐 QVector().data()的主要内容,如果未能解决你的问题,请参考以下文章

内存对齐问题

内存对齐以及如何关闭内存对齐

内存对齐原理

关于C++的内存对齐

结构体内存对齐

内存对齐的原则