Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 함수 실행 시간을 측정하는 방법

C에서 함수 실행 시간 측정하기

프로그램이나 특정 프로세스가 실행되는 데 걸리는 시간을 계산해야 하는 경우가 자주 있습니다. C 언어에서는 clock() 함수를 사용하여 이를 간단하게 측정할 수 있습니다. clock() 함수는 표준 헤더 파일인 time.h에 정의되어 있으며, 프로그램 시작 이후 경과된 프로세서 시간(클록 틱 수)을 반환합니다.

경과 시간을 구하는 원리는 다음과 같습니다. 작업을 수행하기 직전에 clock()으로 시작 시점의 값을 저장하고, 작업이 끝난 후 다시 clock()을 호출하여 두 값의 차이를 구합니다. 그다음 이 차이를 CLOCKS_PER_SEC(초당 클록 틱 수)로 나누면 실제 소요된 시간을 초 단위로 얻을 수 있습니다.

측정 절차 요약

1. 코드 실행 전 clock() 함수를 호출하여 시작 시간을 기록합니다.
2. 측정하려는 작업 또는 함수를 실행합니다.
3. 작업 종료 후 다시 clock()을 호출하고, 시작 시간을 빼서 차이를 계산합니다.
4. 그 결과를 CLOCKS_PER_SEC로 나누어 초 단위의 경과 시간을 구합니다.

예제 코드

아래 예제는 사용자가 Enter 키를 누를 때까지 카운터가 동작하며, take_enter() 함수가 실행되는 데 걸린 시간을 측정합니다.

#include <stdio.h>
#include <time.h>

void take_enter() {
    printf("Press enter to stop the counter \n");
    while(1) {
        if (getchar())
            break;
    }
}

int main() {
    // take_enter() 함수의 실행 시간을 계산합니다.
    clock_t t;
    t = clock();
    printf("Timer starts\n");

    take_enter();

    printf("Timer ends \n");
    t = clock() - t; // 시작 시간을 빼서 경과 시간(틱)을 구함
    double time_taken = ((double)t)/CLOCKS_PER_SEC; // 초 단위로 변환

    printf("The program took %f seconds to execute", time_taken);
}

실행 결과

Timer starts
Press enter to stop the counter
Timer ends
The program took 5.218000 seconds to execute

참고 사항

clock() 함수가 반환하는 값은 실제 벽시계(wall-clock) 시간이 아니라 CPU가 해당 프로그램을 처리하는 데 사용한 프로세서 시간이라는 점에 유의해야 합니다. 따라서 입출력 대기처럼 CPU가 유휴 상태인 시간은 포함되지 않을 수 있으며, 멀티스레드 환경에서는 스레드별 CPU 시간이 합산될 수도 있습니다. 벽시계 기준의 실제 경과 시간이 필요하다면 POSIX 환경에서는 clock_gettime(), Windows 환경에서는 QueryPerformanceCounter() 같은 고해상도 타이머 API를 사용하는 것이 좋습니다.