内存对齐 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<__m256i>
或类似名称以及 reinterpret_cast
进出。
¹ 不完全正确,请参阅 http://thread.gmane.org/gmane.comp.lib.qt.devel/22326/focus=22596
【讨论】:
以上是关于内存对齐 QVector().data()的主要内容,如果未能解决你的问题,请参考以下文章