Вопрос по поводу функции clock () - PullRequest
2 голосов
/ 31 марта 2011

Почему время выполнения функции f1 () изменяется от одного запуска к другому в режиме отладки?Почему в режиме релиза всегда ноль?

Я не включил ни stdio.h, ни cstdio, а скомпилированный код.Как?

#include <iostream>
#include <ctime>

void f1()
{
    for( int i = 0; i < 10000; i++ );
}

int main()
{
    clock_t start, finish;

    start = clock();
    for( int i = 0; i < 100000; i++ ) f1();
    finish = clock();

    double duration = (double)(finish - start) / CLOCKS_PER_SEC;

    printf( "Duration = %6.2f seconds\n", duration);
}

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Возможно машина, с которой вы запускаете тестовый код, слишком быстра. Попробуйте увеличить количество циклов до действительно огромного числа.

Другие вещи, которые нужно попробовать - это проверить с помощью функции sleep (). Это должно подтвердить поведение ваших часов () измерений.

0 голосов
/ 31 марта 2011

Я полагаю, что причина, по которой вы видите нулевое время выполнения для f1() в режиме выпуска, заключается в том, что компилятор оптимизирует функцию.Поскольку ваш цикл for не имеет блока кода, он может быть эффективно извлечен во время компиляции.

Я предполагаю, что эта оптимизация не выполняется в режиме отладки, что объясняет, почему вы видите более длительное время выполнения.Он варьируется между запусками просто потому, что ваш планировщик ОС (почти наверняка) не гарантирует фиксированный интервал времени для процессов.

Что касается того, почему вы можете использовать printf(), если вы явно не включили <cstdio>, это потому, чтоиз <iostream> include.

Если посмотреть мои заголовки на C: \ Program Files \ Microsoft Visual Studio 10.0 \ VC \ include , я вижу, что iostream включает istream и ostream , оба из которых включают ios , который включает xlocnum , который включает в себя cstdlib и cstdio .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...