Очевидный ответ заключается в том, что выполнение вашего кода занимает всего 5 микросекунд.Возможно, потому что вы никогда не используете sum
, поэтому компилятор исключит любой код, используемый для изменения его значения (и, следовательно, внутреннего цикла).Ваше измерение, скорее всего, определяется гранулярностью clock
.Вы также хотите измерить как можно больший период: я бы с подозрением отнесся к измерениям, если два вызова на clock
составляют менее 5 минут на часть (но, конечно, я буду использовать гораздо более короткий интервалпри отладке программы :-)).Мое решение (и я не говорю, что оно идеально), как правило, заключалось в том, чтобы поместить измеряемый код в виртуальную функцию, в производный класс, с функцией в базовом классе, которая ничего не делает, что-то вроде:
class Base
{
static int ourCount;
static double ourTare;
virtual void doRun();
public:
double run();
static void setCount( int count );
};
int Base::ourCount = 0;
double Base::ourTare = 0.0;
void Base::doRun() {}
double Base::run()
{
clock_t start = clock();
for ( int count = ourCount; count > 0; -- count )
doRun();
clock_t end = clock();
return (static_cast<double>(end - start) / CLOCKS_PER_SEC - ourTare;
}
void Base::setCount( int count )
{
ourCount = count;
ourTare = 0.0;
// The following has been sufficient in the past. If the
// compiler inlines Base::run, however, it could be
// insufficent. (In my own code, Base::run is in a
// separate translation unit.)`
ourTare = Base().run();
}
class Derived
{
int d;
virtual void doRun();
public:
};
void Derived::doRun()
{
int sum = 0;
for ( int i = 1; i <= 100; ++ i ) {
sum += i * i;
}
d = sum;
}
Затем вы вызываете Base::setCount
со счетом (для чего-то простого, например, бесполезного меньше, чем миллион), создаете экземпляр Derived и вызываете run
, чтобы получить общее время в секундах.,Вы можете разделить его на количество, если вам нужно время на итерацию.
(Более легкомысленным ответом будет то, что программа выдает "5e-006"
, потому что компилятор не работает. Это недопустимый вывод для любой плавающей запятойзначение в C ++.)