Programming Language/Data Structure in C

C언어에서 코드 실행 시간 측정하는 방법 (Measurement)

movefun-tech 2023. 10. 10. 21:00
반응형

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

반응형