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

C++ clock() 함수로 프로그램 실행 시간 측정하는 방법

C++에서는 clock() 함수를 사용해 프로세스의 실행 시간을 손쉽게 측정할 수 있습니다. 이 함수는 <ctime> 헤더 파일(C 언어에서는 time.h)에 정의되어 있으며, 프로그램이 시작된 후 경과한 프로세서 시간을 클록 틱(clock tick) 단위로 반환합니다.

경과 시간을 구하는 원리는 간단합니다. 작업 시작 전에 clock()으로 시간을 기록하고, 작업이 끝난 후 다시 한 번 시간을 측정한 뒤 두 값의 차이를 계산하면 됩니다. 이렇게 얻은 차이 값을 초 단위로 변환하려면 CLOCKS_PER_SEC(초당 클록 틱 수)로 나누어 주면 됩니다.

예제 코드

아래 예제는 사용자가 엔터 키를 누를 때까지 걸린 시간을 측정하는 프로그램입니다.

#include <iostream>
#include <ctime>
using namespace std;

void take_enter() {
    cout << "Press enter to stop the counter" << endl;
    while(1) {
        if (getchar())
            break;
    }
}

main() {
    // take_enter() 함수의 실행 시간 계산
    clock_t t;
    t = clock();
    cout << "Timer starts\n";
    take_enter();
    cout << "Timer ends \n";
    t = clock() - t;
    double time_taken = ((double)t)/CLOCKS_PER_SEC; // 경과 시간 계산
    cout << "The program took " << time_taken << " seconds to execute";
}

실행 결과

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

코드 설명

  • clock_t t; : clock() 함수가 반환하는 값을 저장하기 위한 변수입니다. clock_t는 시간을 표현하는 전용 데이터 타입입니다.
  • t = clock(); : 타이머 시작 지점의 클록 틱 값을 기록합니다.
  • t = clock() - t; : 작업 종료 후의 값에서 시작 값을 빼서 실제 소요된 클록 틱 수를 구합니다.
  • ((double)t)/CLOCKS_PER_SEC : 클록 틱 수를 초 단위로 변환합니다. 정수 나눗셈 오류를 방지하기 위해 double형으로 형 변환하는 것이 중요합니다.

이처럼 clock() 함수는 코드 성능 분석이나 특정 연산에 걸리는 시간을 확인할 때 유용하게 활용할 수 있습니다. 다만 이 함수는 CPU가 실제로 작업에 사용한 프로세서 시간을 측정하므로, 입출력 대기 등 유휴 시간은 포함되지 않는다는 점을 참고하시기 바랍니다.