Выровненная память 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 */;
}
Я использую Intel C++ Compiler.
1 ответ
Решение
На ум приходят два решения:
- Забудь об этом: используй
std::vector
и подходящий распределитель.QVector
полезная нагрузка данных выделяетсяalignof(T)
.¹ - 32-байтовое выравнивание пахнет SIMD-обработкой, так что вы можете использовать
QVector<__m256i>
или аналогичные иreinterpret_cast
и из.
¹ не совсем верно, см. http://thread.gmane.org/gmane.comp.lib.qt.devel/22326/focus=22596