일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬
- ubuntu
- ChatGPT
- 백준
- Real or Not? NLP with Disaster Tweets
- PYTHON
- 더현대서울 맛집
- 편스토랑
- 자연어처리
- dacon
- SW Expert Academy
- Kaggle
- 코로나19
- Docker
- leetcode
- gs25
- github
- Git
- 맥북
- 캐치카페
- hackerrank
- AI 경진대회
- 데이콘
- 금융문자분석경진대회
- 편스토랑 우승상품
- Baekjoon
- 프로그래머스
- 프로그래머스 파이썬
- 우분투
- programmers
- Today
- Total
솜씨좋은장씨
[GCC/C] struct timeval 과 gettimeofday 를 활용하여 코드 실행 소요시간 구하는 방법! 본문
[GCC/C] struct timeval 과 gettimeofday 를 활용하여 코드 실행 소요시간 구하는 방법!
솜씨좋은장씨 2023. 3. 5. 08:39
🧑🏻💻 timeval 구조체
strcut timeval
{
__time_t tv_sec; // Second - 초
__suseconds_t tv_usec; // Microseconds - 마이크로초
}
timeval 구조체는 tv_sec 과 tv_usec 로 구성되어있는데
tv_sec 는 1초 2초 3초 할때 그 초 (Seconds) 정보를
tv_usec 는 1 / 1,000,000 초인 마이크로초 (Microseconds) 정보를 저장합니다.
timeval 구조체를 사용하기 위해서는 sys/time.h 헤더파일을 include 하면 됩니다.
🧑🏻💻 gettimeofday
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
1970-01-01 00:00:00 +0000 (UTC) 이후
gettimeofday 함수를 실행하는 이 시점까지
몇 초 (Second) 가 지났는지, 몇 마이크로초(Microsecond)가 지났는지 그 값을 얻을 수 있는 함수입니다.
- tv 는 현재 시간 값을 저장할 버퍼로 위의 timeval 구조체 형식을 사용합니다.
- tz 는 timezone 을 설정할때 사용하는데 현재는 사용하지 않아 NULL 값을 넣어주면 됩니다.
🧑🏻💻 마이크로초 단위까지 소요시간 구하는 방법
# elapsed_time.c
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
int main() {
struct timeval start_time, end_time;
double elapsed_time;
gettimeofday(&start_time, NULL);
sleep(1);
gettimeofday(&end_time, NULL);
elapsed_time = (end_time.tv_sec - start_time.tv_sec) + ((end_time.tv_usec - start_time.tv_usec) / 1000000);
printf("%fs\n", elapsed_time);
return 0;
}
위 코드는 sleep(1); 작업을 수행하는 동안 걸린 소요시간을 계산하는 코드입니다.
위에서부터 보면
시작시간과 종료시간을 저장하기 위해 timeval 구조체 변수로 start_time, end_time 을 선언하고
이 시작시간과 종료시간을 활용하여 계산한 소요시간을 저장할 double 형식의 elapsed_time 변수를 선언합니다.
struct timeval start_time, end_time;
double elapsed_time;
gettimeofday 함수를 활용하여 시작시간(start_time)을 구합니다.
gettimeofday(&start_time, NULL);
sleep(1); 작업을 수행하고
sleep(1);
작업 수행 이후에 다시 gettimeofday 함수를 활용하여 종료시간(end_time)을 구합니다.
gettimeofday(&end_time, NULL);
이렇게 구한 시작시간, 종료시간을 활용하여 소요시간을 계산한 값을 elapsed_time 에 저장합니다.
elapsed_time = (end_time.tv_sec - start_time.tv_sec) + ((end_time.tv_usec - start_time.tv_usec) / 1000000.0);
end_time 과 start_time 의 tv_sec / tv_usec 의 차이 값을 각각 구한 뒤 더해주면 소요시간이 계산됩니다.
이제 이렇게 만든 코드를 컴파일하고 실행해 보면!
$ gcc elapsed_time.c -o elapsed_time
$ ./elapsed_time
1.000000 s
위와 같이 1.000000 s 가 출력되는 것을 볼 수 있습니다.
읽어주셔서 감사합니다.
'Programming > C | C++' 카테고리의 다른 글
[GCC/C] error: implicit declaration of function 'wait' is invalid in C99 [-Werror,-Wimplicit-function-declaration] 해결 방법 (0) | 2023.03.04 |
---|---|
[C] gcc 컴파일러로 c 파일 컴파일하고 실행하는 방법! (0) | 2023.03.01 |
[GCC] macOS 에 gcc 컴파일러 설치하는 방법! (0) | 2023.03.01 |
[C/C++] 데이터구조론 케이크문제 (0) | 2014.05.22 |
[C/C++] 배열리스트 (0) | 2014.05.21 |