Выровненная память 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 ответ

Решение

На ум приходят два решения:

  1. Забудь об этом: используй std::vector и подходящий распределитель. QVectorполезная нагрузка данных выделяется alignof(T)
  2. 32-байтовое выравнивание пахнет SIMD-обработкой, так что вы можете использовать QVector<__m256i> или аналогичные и reinterpret_cast и из.

¹ не совсем верно, см. http://thread.gmane.org/gmane.comp.lib.qt.devel/22326/focus=22596

Другие вопросы по тегам