이 영역을 누르면 첫 페이지로 이동
웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

페이지 맨 위로 올라가기

웬디의 기묘한 이야기

C/C++ Windows Hooking 개발자의 블로그 입니다! 이곳은 개발 외에도 저의 취미들이 공유되는 기묘한 이야기가 펼쳐집니다.

[C/C++] clock vs gettimeofday Linux와 Windows의 코드 실행 시간 측정 방법

  • 2020.05.03 16:15
  • ⌨ DEVELOPMENT/C++
반응형

 

windows program을 주력으로 개발하다 보니 자연스럽게 사용하던 clock을 이용하여 시간을 측정했습니다. 그런데 linux에서도 똑같이 시간을 측정했는데 system() API를 사용한 부분이 예상 시간이랑 너무나도 차이가 있더라고요... 확인해보니 리눅스에서의 시간 측정 방법이 잘못된 거였습니다.

 

 

 

 

LINUX에서 실행 시간 측정

 

clock()

CPU의 시간을 측정하는 API입니다. 즉, 프로세스가 CPU를 점유하지 않을 때는 시간이 측정되지 않게 되는데요, sleep(), system() API 등 CPU가 점유하지 않는 API를 사용한 시간은 측정이 되지 않습니다.

 

 

gettimeofday()

wall clock time이라고 하여 동작 시간을 측정하는 방식입니다. CPU의 동작 시간만을 확인하는 거와 달리 sleep(), system() 등 모든 동작의 시간을 측정할 수 있습니다.

 

#include<stdio.h>
#include<unistd.h>
#include<sys/time.h>

struct timeval start = {};
gettimeofday(&start, NULL);

...
usleep(1000 * 1000);
...

struct timeval end = {};
gettimeofday(&end, NULL);


//
// 실제 동작시간을 측정하는 공식.
//

double time = end.tv_sec + end.tv_usec / 1000000.0 - start.tv_sec - start.tv_usec / 1000000.0;

printf("%lf sec", time);

 

결과는 아래와 같이 표현됩니다.
> 0.3 sec
> 1.0 sec

 

 

WINDOWS에서 실행 시간 측정

 

GetProcessTimes

Linux에서처럼 CPU시간을 측정하기위한 API입니다. MSDN을 참조하세요.

https://docs.microsoft.com/ko-kr/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocesstimes

 

GetProcessTimes function (processthreadsapi.h) - Win32 apps

Retrieves timing information for the specified process.

docs.microsoft.com

 

 

clock()

windows는 기본적으로 wall clock time을 측정하기 때문에 visual studio를 이용한 빌드시 clock() API만을 사용하면 전체적인 동작 시간을 측정할 수 있습니다.

 

#include<iostream>
#include<ctime>

clock_t start = clock();

...
Sleep(1000);
...

clock_t end = clock();

//
// 실제 동작시간을 측정하는 공식.
//

double time = (double)(end - start) / CLOCKS_PER_SEC;

printf("%lf sec", time);

 

결과는 아래와 같이 표현됩니다.
> 0.3 sec
> 1.0 sec

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'⌨ DEVELOPMENT > C++' 카테고리의 다른 글

[C/C++] InternetReadFile Simple File Download.  (6) 2020.03.04
[Solved] Resolver error: The VS Code Server failed to start  (3) 2019.12.14
[C/C++] Get Process Name by Process Id 3가지 방법  (0) 2019.12.12
[MFC] Dialog based - class name 지정하는 간단한 방법  (3) 2019.09.08
[C++] Boost ASIO를 이용한 안전한 TCP/IP 비동기 소켓 서버 예제  (5) 2019.08.07
[MFC] Dialog Load GIF image  (5) 2019.07.28
[C++] How to use GDIPlus Library in c++  (0) 2019.07.28
[MFC] 다이얼로그의 윈도우 소멸자 호출 순서  (1) 2019.07.28

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [C/C++] InternetReadFile Simple File Download.

    [C/C++] InternetReadFile Simple File Download.

    2020.03.04
  • [Solved] Resolver error: The VS Code Server failed to start

    [Solved] Resolver error: The VS Code Server failed to start

    2019.12.14
  • [C/C++] Get Process Name by Process Id 3가지 방법

    [C/C++] Get Process Name by Process Id 3가지 방법

    2019.12.12
  • [MFC] Dialog based - class name 지정하는 간단한 방법

    [MFC] Dialog based - class name 지정하는 간단한 방법

    2019.09.08
다른 글 더 둘러보기

정보

웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

  • 웬디의 기묘한 이야기의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 이야기

카테고리

  • 분류 전체보기 (204)
    • MY STORY (2)
    • 📸 WALKING WITH YOU (85)
      • 아이슬란드 신혼여행 이야기 (14)
      • 대한민국 구석구석 (62)
      • CONTAX N1 + T* 28-80mm (4)
      • SAMSUNG NX3000 (1)
      • 어느 멋진 날 (4)
    • ⌨ DEVELOPMENT (80)
      • BOOK:Review (1)
      • AI (13)
      • C++ (26)
      • Python (10)
      • WIndows Hooking (9)
      • Windows Kernel (3)
      • Design Pattern (3)
      • Debugging (9)
      • Tools (0)
      • Project (1)
      • Android (1)
      • 상업용 무료폰트 (4)
    • OS (4)
      • News (0)
      • Windows 일반 (4)
    • 모바일 (2)
      • 모바일 게임 (2)
    • 멘사 퍼즐 (9)
    • 생활 꿀 TIP (7)
      • 건강 (3)
      • 일상 (2)
    • 물생활 (8)
      • 골든볼 라미네지 롱핀 (8)
    • IT 기기 (2)
    • BLOG (4)
      • TISTORY BLOG TIP (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • AI
  • 신혼여행
  • windbg
  • 카페
  • c++
  • 아이슬란드
  • 해외여행
  • c

나의 외부 링크

  • kernel undocument api
  • 지구 관찰자의 일기
  • 지구와 지구곰

정보

WENDYS의 웬디의 기묘한 이야기

웬디의 기묘한 이야기

WENDYS

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © WENDYS. Designed by Fraccino.

티스토리툴바