• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

endl 과 \n 속도 차이 확인 중 질문

22.12.03 15:38 작성 조회수 209

0

const int MILLS = 1000000;

int main()

{

DWORD dwStart1 = GetTickCount();

for (int i = 0; i <= MILLS; ++i)

cout << "h" << '\n';

DWORD dwEnd1 = GetTickCount();

DWORD dwStart2 = GetTickCount();

for (int i = 0; i <= MILLS; ++i)

cout << "h\n";

DWORD dwEnd2 = GetTickCount();

DWORD dwStart3 = GetTickCount();

for (int i = 0; i <= MILLS; ++i)

cout << "h" << endl;

DWORD dwEnd3 = GetTickCount();

cout << dwStart1 << ' ' << dwEnd1 << ' ' << dwEnd1 - dwStart1 << '\n';

cout << dwStart2 << ' ' << dwEnd2 << ' ' << dwEnd2 - dwStart2 << '\n';

cout << dwStart3 << ' ' << dwEnd3 << ' ' << dwEnd3 - dwStart3 << '\n';

}

 

갑자기 궁금해서 endl 이랑 \n 속도 차이 확인해보고자 어셈블리어 확인하고 결과 값도 확인했습니다. 2번 결과가 왜 빠른지는 어셈블리어 확인하면서 << 연산자 때문이라는 것도 알았습니다.

최종적으로 1번과 3번이 큰 차이는 안나지만 대체로 1번이 더 느리던데 왜 그런가요? 검색해본 결과는 flush 차이로 \n이 더 빠르다고 하지만 반대의 결과가 나와서 궁금합니다. (어셈블리어로 확인해보려 했으나 ??로 채워진 부분도 있어 알아보기 어렵고 같은 for문에서도 어셈블리어가 다르게 적용 돼 있습니다.1번.png3-1번.png3-2번.png

답변 1

답변을 작성해보세요.

0

이쪽 부분은 어셈의 영역이 아닌 cout 자체의 문제라서 어셈으로 봐도 알기가 어렵습니다.
그리고 사실 저도 알지 못하고 + 생각해본 적이 없는 문제라, 정확한 답변을 드리기 힘들 것 같네요.
(stackoverflow 형님들이라면 알 수도 있지 않을까요?)