Как точно вывести время компиляции?

438
05 сентября 2017, 10:46

Чтобы вплоть до секунд. Где-то писали, что это все решается с помощью библиотеки <ctime> и временным типом time_t, но не работает

int main()
{
    time_t start= time(0);
    char mas[80] = {'c', 'a', 's', 't', 'l', 'e', 'v', 'a', 'n', 'i','a'  }; 
    char *p;
    p=mas;
    cout << p << endl;
    cout << (time(0)-start) << " минут" << endl;
}

Я пробовал в

(time(0)-start) 

Умножать на 60 и 3600, но в итоге все равно выдает 0, но я не уверен, что программа компилится за 0 секунд? Или проблема в том, что я прошу вернуть в этом коде мне целочисленный тип? Тогда каково решение?

Answer 1

Время выполнения программы:

  1. C++11 способ. Получаем два времени через chrono::high_resolution_clock::now(), вычитаем их. Получаем временной интервал (chrono::duration). Временной интервал хранит тип тика и число тиков. В качестве типа тика могут быть секунды, миллисекунды и другие. Далее через chrono::duration_cast приводим этот временной интервал к временному интервалу с типом тика миллисекунды. И с помощью метода count получаем число миллисекунд.

    #include <iostream>
    #include <chrono>
    using namespace std;
    int main() {
        auto start = chrono::high_resolution_clock::now();
        // здесь код, например:
        for (int i = 0; i < 1e8; ++i) {}
        auto end = chrono::high_resolution_clock::now();
        double seconds = chrono::duration_cast<chrono::milliseconds>(end - start).count() / 1000.0;
        printf("Программа работала %.3f секунд\n", seconds);
        return 0;
    }
    
  2. Через clock() и CLOCKS_PER_SEC:

    #include <iostream>
    using namespace std;
    int main() {
        // здесь код, например:
        for (int i = 0; i < 1e8; ++i) {}
        double seconds = clock() / (double) CLOCKS_PER_SEC;
        printf("Программа работала %.3f секунд\n", seconds);
    }
    

Время компиляции программы:

В linux при компиляции из командной строки можно воспользоваться утилитой time:

% time g++ main.cpp
g++ main.cpp  0,42s user 0,05s system 99% cpu 0,470 total

Либо можно компилировать с аргументом -ftime-report, это выдаст статистику времени компилирования, общее время будет в последней строчке

g++ -ftime-report main.cpp
Answer 2

Для измерения времени компиляции есть специальная библиотека для cmake: metabench. Позволяет измерить время компиляции отдельного фрагмента файла. Принцип действия прост: сначала компилируется файл без этого фрагмента, затем - с ним (с помощью макросов). Разница во времени - время компиляции этого фрагмента. Естественно, тестируемый фрагмент должен быть независимым.

Результаты выводятся в разных вариантах, в том числе в виде html с графиками.

Подробностей я уже не помню, в проекте есть примеры. Под Windows точно работает с mingw64, с другими не пробовал.

READ ALSO
Прокрутка к якорю, но немного выше

Прокрутка к якорю, но немного выше

ПриветствуюПрокрутка к якорю на jQuery - очень популярная тема и у меня как раз вопрос по этому

228
Как перезаписать файл бд

Как перезаписать файл бд

Есть такая задача: с сервера получить файл базы данных(в форматеdb) и перезаписать старый файл на новый

324