C언어에서 코드 실행 시간 측정하는 방법 (Measurement)
자료구조에서 성능을 분석하기 위한 방법 중에는 측정(Measurement)이 있습니다. 이는 컴퓨터 자체에서 실행 시간을 측정하기 위한 방법으로 사용됩니다.
C언어 성능 측정
C언어에서 성능을 측정하기 위해서는 어떤 방법이 있을까요?
- 헤더
- time.h
- 자료형
- clock_t
- 함수
- clock(void)
- 매크로
- CLOCKS_PER_SEC;
C언어 기본 문법
우선 C언어의 기본 틀입니다.
#include <stdio.h> // 헤더
int main(void) // main 함수, 가장 먼저 실행되는 함수
{
return 0; // int형 반환
}
시간 측정을 위한 문법
위의 헤더, 자료형, 함수를 이용해 시간 측정을 위한 틀을 작성해 보겠습니다.
#include <stdio.h>
#include <time.h>
void main( void )
{
clock_t start, finish;
double duration;
start = clock();
// 성능 측정 할 코드
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf("%f 초입니다..\n", duration);
}
이 코드에서 반복문이나 성능을 측정해야 할 부분이 있는 경우 주석처리된 [성능 측정 할 코드] 부분에 코드를 추가해 성능을 측정할 수 있습니다.
#include <time.h>
C언어에서 시간 관련 함수를 모아놓은 라이브러리입니다.
clock_t
clock_t는 아래와 같이 사용되어 있습니다.
typedef long clock_t
위의 코드에서는 long 자료형을 clock_t 키워드를 사용해 표현할 수 있습니다. 다른 말로 clock_t를 long 자료형으로 대체해 사용해도 되기는 한다는 뜻입니다.
clock() 함수
time.h 헤더에 들어있는 함수로 프로세서의 clock 속도를 반환합니다.
start, finish, duration
start = clock();으로 시작 클럭을 start에 넣습니다.
finish = clock();으로 측정 완료된 클럭을 finish에 넣습니다.
duration은 실행 시간을 담는 변수입니다.
duration = (double)(finish - start) / CLOCKS_PER_SEC;
- double 형으로 명시적 형변환 합니다.
- (finish - start)로 실행 시간 동안 clock의 수를 계산한 후 CLOCKS_PER_SEC으로 나눕니다.
CLOCKS_PER_SEC
매크로 상수입니다. 위에서 계산한 (finish - start)는 마이크로초(μs) 단위입니다. 때문에 CLOCKS_PER_SEC 상수로 나누어 초(s) 단위로 만들어 준 것입니다.
구구단 성능 측정
아래는 구구단 전체를 출력하는 코드의 실행시간을 측정하는 코드입니다.
#include <stdio.h>
#include <time.h>
void main( void )
{
clock_t start, finish;
double duration;
start = clock();
for(int i=1; i<=9; i++){
for(int j=2; j<=9; j++){
printf("%d x %d = %d\t", j, i, j*i);
}
printf("\n");
}
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf("%f 초입니다..\n", duration);
}
결과를 보겠습니다.
2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 6 x 1 = 6 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9
2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10 6 x 2 = 12 7 x 2 = 14 8 x 2 = 16 9 x 2 = 18
2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15 6 x 3 = 18 7 x 3 = 21 8 x 3 = 24 9 x 3 = 27
2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20 6 x 4 = 24 7 x 4 = 28 8 x 4 = 32 9 x 4 = 36
2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45
2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54
2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49 8 x 7 = 56 9 x 7 = 63
2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64 9 x 8 = 72
2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
0.028000 초입니다..
총 실행 시간이 0.028000초인 것을 확인할 수 있습니다.