четверг, 23 июня 2011 г.

std::vector и QVector

А что мы, собственно, теряем по скорости используя QVector вместо sdt::vector? Оказывается не так уж и мало...

Машина и ПО, использовавшиеся в тесте:


Код с использованием std::vector
#include <vector>

using std::vector;

int main(int argc, char *argv[]) {

    vector<double> v;
    v.resize(10000000);

    for (size_t i=0; i<v.size(); i++) {

        v[i] = 67.687353 * (i + 13.507867) /
        (i * 45.686754) - 12.56;
    }

    return 0;
}

Код с использованием QVector
#include <QVector>

int main(int argc, char *argv[]) {

    QVector<double> v;
    v.resize(10000000);

    for (int i=0; i<v.size(); i++) {

        v[i] = 67.687353 * (i + 13.507867) /
        (i * 45.686754) - 12.56;
    }

    return 0;
}

Замеры времени выполнения программы проводились с помощью утилиты time.

Результаты: в среднем, (по пяти замерам) использование QVector увеличило время выполнения программы на 10%...

3 комментария:

  1. Я, кстати говоря, тоже заметил, что разница в производительности имеется. Впрочем, тот факт, что стандартное быстрее нестандартного, вполне ожидаем.

    ОтветитьУдалить
  2. То, что QVector оказался медленнее std::vector есть следствие Implicit Sharing: http://developer.qt.nokia.com/doc/qt-4.8/implicit-sharing.html

    ОтветитьУдалить
  3. Кстати наткнулся на весьма интересную информацию:
    * http://developer.qt.nokia.com/doc/qt-4.8/qtglobal.html#Q_DECLARE_TYPEINFO
    * http://doc.qt.nokia.com/qq/qq19-containers.html

    ОтветитьУдалить