内存对齐 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++ 编译器。
想到了两个解决方案:
- 算了吧: 使用
std::vector
和合适的分配器。 QVector
的数据负载分配给 alignof(T)
.¹
- SIMD 处理的 32 字节对齐味道,因此您可以使用
QVector<__m256i>
或类似的 reinterpret_cast
进出。
¹ 不完全正确,参见 http://thread.gmane.org/gmane.comp.lib.qt.devel/22326/focus=22596
我正在使用 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++ 编译器。
想到了两个解决方案:
- 算了吧: 使用
std::vector
和合适的分配器。QVector
的数据负载分配给alignof(T)
.¹ - SIMD 处理的 32 字节对齐味道,因此您可以使用
QVector<__m256i>
或类似的reinterpret_cast
进出。
¹ 不完全正确,参见 http://thread.gmane.org/gmane.comp.lib.qt.devel/22326/focus=22596