[c++] printf, std::cout과 const char*, std::string의 성능 테스트

반응형

간단하게 도스게임을 만들고 싶은데 화면 드로우에서 많은 시간이 들면 껌뻑껌뻑 너무 큰딜레이가 생겨서 게임 하기가 어렵다.

당연히 게임 루프를 최적화 하고 드로우를 한프레임당 한번씩 하면 되겠지만 한번 드로우 할때의 시간도 계산할 필요가 있는거 같아 계산을 해본다.

컨테이너 값 수집속도나 루프 속도는 프로그래밍하는 사람마다 천차만별의 속도를 낼수있음으로 건너 뛰고

컨테이너 출력 속도 만 테스트 해본다.

 

출력할 문자열은 'a' 100개와 '\n' 10개 이며,

시간 계산 라이브러리는 chrono를 사용했다.

 

소스코드

auto start = std::chrono::system_clock::now();
auto end = start;
{
    start = std::chrono::system_clock::now();
    printf(ConstChar);
    end = std::chrono::system_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << elapsed_seconds.count() << ": Char / Printf" << endl;
}
{
    start = std::chrono::system_clock::now();
    cout << ConstChar;
    end = std::chrono::system_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << elapsed_seconds.count() << ": Char Cout" << endl;
}
{
    start = std::chrono::system_clock::now();
    printf(StdString.c_str());
    end = std::chrono::system_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << elapsed_seconds.count() << ": String Printf" << endl;
}
{
    start = std::chrono::system_clock::now();
    cout << StdString;
    end = std::chrono::system_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << elapsed_seconds.count() << ": String cout" << endl;
}
 

출력

1회차
    0.0002954 : Char   / Printf
    0.0030487 : Char   / Cout
    0.0000919 : String / Printf
    0.0073169 : String / Cout

2회차
    0.0004496 : Char   / Printf
    0.0034958 : Char   / Cout
    0.0000878 : String / Printf
    0.0044118 : String / Cout

3회차
    0.0001510 : Char   / Printf
    0.0053478 : Char   / Cout
    0.0001382 : String / Printf
    0.0052763 : String / Cout

4회차
    0.0002420 : Char   / Printf
    0.0033809 : Char   / Cout
    0.0000931 : String / Printf
    0.0043290 : String / Cout

5회차
    0.0001182 : Char   / Printf
    0.0035803 : Char   / Cout
    0.0000837 : String / Printf
    0.0044189 : String / cout
더할까 생각했지만 시간나오는거 보고 그만 뒀다.
생각 외로 당연히 const char* 에서 printf 출력한값이 제일 빠를줄 알았으나, string 에서 printf 출력한게 제일 빨랐다.

 

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

C++ STL 반복문 속도 비교 (for,iterator,for_each)  (0) 2022.05.10
비주얼 스튜디오 단축키  (0) 2017.03.30
Qt프레임워크 강좌  (0) 2017.02.25
C++ 문자열, 숫자 변환  (0) 2017.02.13