참고한 것들
TL;DR
Header 파일
#include <sys/time.h>
- C 에서 UNIX time 을 마이크로초 단위로 얻기 위해서는
struct timeval
와gettimeofday()
를 이용하면 된다.
struct timeval time;
gettimeofday(&time, NULL);
- 이렇게 하면 여러 단위의 값이 담기는데, 마이크로초를 구하기 위해서는 다음의 계산식을 이용하면 된다.
uint64_t usec = time.tv_sec * (int)1e6 + time.tv_usec;
- 이건 macro 를 설정해두면 편하다.
#define MICROSEC(time) \
(time.tv_sec * (int)1e6 + time.tv_usec)
코드 실행 시간 예제
- 보통은 이짓을 하는 이유는 코드의 어떤 부분에 대해 실행시간이 얼마나 걸리냐를 알기 위해서이다.
- 그래서 이런식으로 하면 실행시간을 구할 수 있다.
#include <stdint.h>
#include <stdio.h>
#include <sys/time.h>
#define MICROSEC(time) \
(time.tv_sec * (int)1e6 + time.tv_usec)
void job(void)
{
for (int i = 0; i < (1 << 20); i++)
;
}
int main(void)
{
struct timeval time;
uint64_t usec;
// 시작시간
gettimeofday(&time, NULL);
usec = MICROSEC(time);
// 뭔가 막 해 막
job();
// 끝시간
gettimeofday(&time, NULL);
usec = MICROSEC(time) - usec;
printf("Time elapsed: %lu\n", usec);
}