반응형

'C로 배우는 알고리즘' 책 예제 중에서 알고리즘 성능 측정하는 부분이 있길래 찾아보았다.

책에는 터보 C의 biostime() 함수인가 여튼 헤더 파일 만들어서 쓰라고 되어있지만.

그 책은 20년전에 나온 것이니 발전이 없겠는가.

그래서 간단히 네이버 검색으로 찾아보았다.


1. time() 함수 이용

ㄱ. 일단 time.h 헤더 파일 include

ㄴ. time_t 타입의 변수로 두 개 선언(이름은 편리하게 start, end로)

ㄷ. 소스의 앞뒤로 time() 함수를 선언하고 매개변수로 위에 선언한 두 변수의 주소 값을 넣음

ㄹ. difftime() 함수로 경과 시간 구함



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

void main() {
int i, sum;
time_t start, end;

time(&start);
for(i = 0; i < 100; i++) {
sum += i;
}
time(&end);

printf("The sum is %d, elapse time : %f", sum, difftime(end, start));

}

이런 식으로 하면 된다.


근데 이제와서 이렇게 말하면 허무할 지도 모르겠지만 저 time() 함수는 초단위로만 계산한다.

엄청 큰 프로그램의 경우라면 나을 지도 모르겠지만(그런 사람들이 애초에 이걸 보고 있지 않을 거다.)

나 같이 예제나 치고 있을 사람들에겐 저건 너무 빠르다.


2. clock() 함수 이용

ㄱ. 일단 time.h 헤더 파일 include

ㄴ. clock_t 타입의 변수로 두 개 선언(이름은 편리하게 start, end로)

ㄷ. 소스의 앞뒤로 clock() 함수를 선언하고 매개변수로 위에 선언한 두 변수의 주소 값을 넣음

ㄹ. 뒤에 선언한 값에서 앞의 선언한 값을 빼고 이를 CLOCKS_PER_SEC으로 나눈다. 왜냐하면 clock_t는 CPU 클럭수 값을 나타내기에 이를 초당 클럭 수로 나눠주면 좀 더 정말한 초 값을 얻을 수 있다.

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

void main() {
int i, sum;
clock_t start, end;

start = clock();
for(i = 0; i < 100; i++) {
sum += i;
}
end = clock();

printf("The sum is %d, elapse time : %f", sum, (double) (end - start)/CLOCKS_PER_SEC);

}

이렇게 하면 된다.

반응형
Posted by 애콜라이트
l

free counters