• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

마지막 예제에 대해 질문드립니다.

21.10.25 17:00 작성 조회수 173

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
마지막 예제의 29분 40초 경
bool isEven = ((count % 2) == 0); 이라는 라인을 입력하게 되는데,
이렇게 되면 루프가 돌 때마다 변수의 값을 변경하는게 아닌,
isEven이라는 변수를 매번 선언하게 되는 것처럼 보입니다.
이 경우 별다른 문제는 없는 것인가요?
 
추가로 질문이 더 있는데, 이 부분을 디스어셈블리로 봤을 경우
마치 분기문처럼 어셈블리어가 이루어져 있더라구요. 이 부분은 ((count % 2) == 0)처럼 비교를 하는 부분이 있기 때문에 이해가 가는데,
중간에 dec와 or, inc가 나오는 라인은 왜 그런 것인지 이해가 되지 않습니다.
나머지를 구하는 연산의 경우 div 명령어를 사용하여 dx 레지스터에 저장된 나머지값을 가져오면 되는 것으로 이해하고 있습니다. 그렇게 하지 않는 것은 해당 컴파일러의 특성처럼 이해해도 될 것 같은데, 그것 외에 그냥 해당 instruction 자체가 이해가 가지 않아서, 이해를 돕고자 질문드립니다.
해당 어셈블리 부분 첨부합니다.
 
bool isEven = ((count % 2) == 0);
006924D0mov eax,dword ptr [ebp-44h]
006924D3 and eax,80000001h
006924D8 jns std::_Narrow_char_traits<char,int>::length+0Fh (06924DFh)
006924DA dec eax
006924DB or eax,0FFFFFFFEh
006924DE inc eax
006924DF test eax,eax
006924E1 jne std::_Narrow_char_traits<char,int>::length+1Fh (06924EFh)
006924E3 mov dword ptr [ebp-118h],1
006924ED jmp std::_Narrow_char_traits<char,int>::length+29h (06924F9h)
006924EF mov dword ptr [ebp-118h],0
006924F9 mov cl,byte ptr [ebp-118h]
006924FF mov byte ptr [ebp-4Dh],cl

답변 1

답변을 작성해보세요.

0

bool isEven = ((count % 2) == 0); 이라는 라인을 입력하게 되는데,
이렇게 되면 루프가 돌 때마다 변수의 값을 변경하는게 아닌,
isEven이라는 변수를 매번 선언하게 되는 것처럼 보입니다.

이 경우 별다른 문제는 없는 것인가요?

네 상관없습니다.
생성자가 있는 class 타입이라면 기본 생성자가 루프마다 호출되니 동작이 다를 수 있지만,
bool의 경우 bool isEven으로 밖으로 빼도 동일하게 코드가 만들어집니다.

그리고  cout 등을 사용하면 어셈이 굉장히 복잡해지고

경우에 따라 잘못 표기되는 경우도 있으니 해당 부분을 빼고 다시 테스트 해보세요.