C언어 프로그램/함수 실행 시간 측정
C언어에서 사용할 수 있는 프로그램/함수 실행 간 시간 측정 방법을 공유한다.
timeval 구조체를 이용하여 작성하였고 마이크로초(us) 단위로 측정하였다.
단위의 변환이 필요하다면 코드를 고쳐서 사용하도록 하자.
소스코드
- sleep 하여 1000000 us(1초)에 근사한 측정치를 보여주는지 확인하자.
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
double calc_diff_time(struct timeval _x, struct timeval _y) {
double x_us, y_us, diff;
x_us = (double)_x.tv_sec * 1000000 + (double)_x.tv_usec;
y_us = (double)_y.tv_sec * 1000000 + (double)_y.tv_usec;
diff = (double)y_us - (double)x_us;
return diff;
}
int main(int _argc, char *_argv[]) {
struct timeval t_time_begin, t_time_end;
// 측정 시작
gettimeofday(&t_time_begin, NULL);
for( int idx = 0 ; idx < 10 ; idx++ ) {
usleep(100000); // 100ms * 10
}
// 측정 종료
gettimeofday(&t_time_end, NULL);
printf("time diff : %.0lf us\n", calc_diff_time(t_time_begin, t_time_end));
return 0;
}
컴파일 및 실행결과
- gcc로 컴파일하고 별도의 옵션은 필요없다.
muabow@muabow:~/dev/cpp_file$ gcc -o time_diff2 time_diff2.c ; ./time_diff2
time diff : 1001683 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001311 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001409 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001424 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001296 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001492 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001285 us
결과로 1000000의 근사치에 가깝게 나오는 걸 확인할 수 있다.
아래 포스팅에서도 언급했듯 sleep은 환경과 시스템의 영향을 받기 때문에 단위가 정밀해질수록 정확한 값을 얻기 어렵다.
https://muabow.tistory.com/299
어쨌든 이 정도 결과면 사용하는데 크게 무리가 없다고 생각된다.
끝.
'IT > programming' 카테고리의 다른 글
[C/C++] C언어 파일 생성/삭제 이벤트 모니터링 / inotify, event monitoring (1) | 2022.01.20 |
---|---|
[C/C++] C언어 mmap, msync, munmap 설명 (4) | 2022.01.19 |
[C/C++] C++ 프로그램/함수 실행 시간 측정, ms 밀리초 기준 (0) | 2022.01.18 |
[JAVA] 클래스와 메서드 설명 (0) | 2022.01.18 |
[C/C++] C++ JSON parser example, C언어 JSON 파서 예제, rapidjson (2) | 2022.01.17 |
댓글