자료구조에서 성능을 분석하기 위한 방법 중에는 측정(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초인 것을 확인할 수 있습니다.