is_реклам:

пошук, категорії та ін. показати ▼

Функція clock(). Час виконання програми мовою С

Функція clock(). Час виконання програми мовою С
автор опубліковано

При написанні програм часто виникає питання ефективності алгоритму. Однією із мір ефективності є час виконання програми. Найпростіший спосіб визначити час роботи програми — це обчислити величину проміжку часу між двома моментами — до запуску програми і після закінчення її роботи.

Опишемо як можна дізнатися час роботи програми, написаної мовою С.

В заголовочному файлі <time.h> стандартної бібліотеки мови програмування С містяться засоби для роботи з датою та часом.

Тип даних clock_t зображує часові тіки; підтримує арифметичні операції.

Протопит функції clock():

clock_t clock(void)

Ця функція повертає час, що приблизно дорівнює часу роботи викликаючої програми — кількість часових тактів (тіків) з моменту початку виконання програми. Функція повертає -1, якщо цей час невідомий.

Поділишви загальну кількість часових тактів на кількість тіків за секунду, ми отримаємо кількоість секунд. Тобто, для переведення часу, що повертає функція clock() в секунди, потрібно його поділити на значення CLOCKS_PER_SEC. Цей макрос заміняється на константу, що містить значення кількості тіків за секунду.

Отже, для переведення часу в секунди, можна скористатися наступною формулою:

clock() / CLOCKS_PER_SEC

Якщо потрібно визначити час роботи усієї програми, то перед оператором return 0; необхідно запустити функцію clock(), яка й покаже робочий час.

Для пошуку часу роботи фрагмента коду, потрібно знайти різницю між кінцевим і початковим часом:

clock_t start, finish, work_time;
start =  clock();              // початковий час
/* CODE */                     // фрагмент коду
finish = clock();              // кінцевий час
work_time = finish - start;    // шуканий час

Проілюструємо роботу функції clock() на прикладі програми, що обчислює суму елементів масиву:

#define MaxValue 1000

#include <alloc.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int i, n, *a, s=0;
    clock_t t;
    float T;
    randomize();
    
    for (n = 10000000; n <= 80000000; n += 10000000) {
        a = malloc(n*sizeof(int));
        for (i = 0; i < n; i++)
            a[i] = random(MaxValue);
        t = clock();
        for (i = 0; i < n; i++)
            s += a[i];
        t = clock() - t;
        T = (float)t / CLOCKS_PER_SEC;
        printf("\nn=%d t=%d T=%.3f", n, t, T);
    }
    getch();
    return 0;
}

Результати роботи програми:



Тут n — кількість елементів масиву, t — час виконання сумування елементів масиву у тактах, Т — час у секундах.

схоже за тегами

Залишити коментар:

Яндекс цитирования UA TOP Bloggers