А что мы, собственно, теряем по скорости используя QVector вместо sdt::vector? Оказывается не так уж и мало...
Машина и ПО, использовавшиеся в тесте:
Код с использованием std::vector
Код с использованием QVector
Замеры времени выполнения программы проводились с помощью утилиты time.
Результаты: в среднем, (по пяти замерам) использование QVector увеличило время выполнения программы на 10%...
Машина и ПО, использовавшиеся в тесте:
- Sony Vaio VPCF12M1R/H;
- Ubuntu 11.04 (amd64);
- gcc v4.5.2 с флагом -O2.
Код с использованием 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%...
Я, кстати говоря, тоже заметил, что разница в производительности имеется. Впрочем, тот факт, что стандартное быстрее нестандартного, вполне ожидаем.
ОтветитьУдалитьТо, что QVector оказался медленнее std::vector есть следствие Implicit Sharing: http://developer.qt.nokia.com/doc/qt-4.8/implicit-sharing.html
ОтветитьУдалитьКстати наткнулся на весьма интересную информацию:
ОтветитьУдалить* http://developer.qt.nokia.com/doc/qt-4.8/qtglobal.html#Q_DECLARE_TYPEINFO
* http://doc.qt.nokia.com/qq/qq19-containers.html