[C, C++] 시간측정 함수 clock

clock 함수

프로그램이 실행되면 0부터 1ms당 1씩 clock이 계속 증가하고 있으며, clock()을 호출할 때 현재 clock(현재까지 증가된 clock)을 얻어올 수 있다. 즉 clock()으로 호출된 결과는 호출된 시점에서의 프로그램 실행시간이다. 이를 이용해서 특정 구간 시작과 끝 clock의 차이를 얻어오면 그 구간의 실행시간을 측정할 수 있다.

RTOS/임베디드 시스템에서의 clock 함수

RTOS에서는 clock 함수 사용시 주의가 필요하다. 하드웨어와 직접적으로 연관이 있는 함수이므로 하드웨어/커널 구조에 따라 다른 결과를 가져오거나 못 가져올 수 있다. 따라서 표준 함수인 clock 대신 RTOS를 위해 만들어진 다른 함수가 있는지 찾아보거나 오실로스코프로 시간을 확인하는 등의 다른 방법을 고려해야 한다.

코드

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

int main(){
    clock_t begin, end;

    begin = clock();
    for(int i=0;i<1000000000;i++) ; // 측정을 원하는 구간
    end = clock();

    printf("ms : %lf\n", (double)(end-begin));
    printf("s : %lf\n", (double)(end-begin)/CLOCKS_PER_SEC);
    return 0;
}

clock 함수의 리턴은 clock_t로 받아온다. clock_t를 표준 입출력 함수로 출력 시 float, double, long 등으로 바꿔주어야 한다. clock 함수의 리턴 단위는 ms다. 100이 출력되었으면 100ms다. 1000으로 나눠주면 sec가 된다. CLOCKS_PER_SEC는 1000과 같다.

Leave a Comment