std::vector<double> C(4);
for(int i = 0; i < 1000;++i)
for(int j = 0; j < 2000; ++j)
{
C[0] = 1.0;
C[1] = 1.0;
C[2] = 1.0;
C[3] = 1.0;
}
является гораздо быстрее, чемСоздание объекта в цикле
for(int i = 0; i < 1000;++i)
for(int j = 0; j < 2000; ++j)
{
std::vector<double> C(4);
C[0] = 1.0;
C[1] = 1.0;
C[2] = 1.0;
C[3] = 1.0;
}
Я понимаю, что это происходит потому, что std::vector
повторно создается и конкретизируется в цикле, но я был под впечатлением, что это будет оптимизирован.
Действительно ли полностью неправильно хранить переменные локально в цикле, когда это возможно? Я был под (возможно ложным) впечатлением, что это обеспечит возможности оптимизации для компилятора.
Возможно, это относится только к типам POD, а не к std::vector
.
EDIT: я использовал VC++ 2005 (режим выпуска) с полной оптимизацией (/Ox
) на Windows XP
Возможны побочные эффекты из-за создания объекта. Но, конечно, это контейнер STL, поэтому ваш компилятор может догадаться, что этого не произойдет. Кстати, вы скомпилировали правильные флаги оптимизации? – Pieter
Какой компилятор, операционная система и параметры компилятора вы использовали? –
@ Pieter & David: Обновлено – Jacob