C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[48121] Re:Re:Re:++, -- 연산자 처리 속도 질문
라스코니 [chouoo] 1703 읽음    2007-02-19 19:18
일반적인 데스크탑 환경에서는 별의미가 없겠으나 코드의 성능에 민감한 임베디드 쪽에서는 고려할 만도 한 내용이네요.

i-- 와 i++ 중 어떤 것이 더 빠르냐 하는 것이네요?

저는 테스트해보지는 않았지만 추측건대 차이가 없다는 쪽으로 생각이 드네요. 왜냐하면 프로세서의 연산기를 설계할 때 덧셈 연산기와 뺄셈 연산기를 성능이 차이나도록 설계하지 않았을 거구요. 덧셈, 뺄셈, 논리 연산은 프로세서의 가장 기본적인 연산이므로 그만큼 성능이 차이가 날만큼 복잡한 기술도 들어가지 않았을 거라는 추측입니다.

하지만 i--와 i++을 for 루프에서 어떻게 사용하느냐에 따라서 조금 성능차이는 있다고 합니다.

예를 들어

for ( i = 1 ; i <= 100 ; i++ )
   sum += i;

보다는

for ( i = 100 ; i-- ; )
   sum += i;

가 더 빠르답니다.




허정주 님이 쓰신 글 :
: 네 로직은 열심히 신경쓰는데
: 그냥 궁금해져서 질문한거에요.
: 정말 궁금해요.
:
: zi 님이 쓰신 글 :
: : 이런거 신경쓰지 마시고 로직에 신경을 쓰는게...  ^^
: : cpu 가 하루가 다르게 발전하고 있는데... 별 의미 없어보이네요..
: : 특히 i++, ++i 는  구분은 특별히 구분해서 써야 할 때가 있지만 쓰임은 속도가 아니라 로직상 구분해서 쓰는 거에요.
: : 일반적으로는 거의 구분없이 쓰여질때가 많습니다.
: :
: : 허정주 님이 쓰신 글 :
: : : 연산자가 전치/후치에 따라 빠르기 순서가 다음과 같았습니다.
: : :
: : : i-- > i++ > ++i > --i
: : :
: : : 전 마지막 것이 빠른줄 알고 썼었는데 ㅡㅜ
: : : 왜 이런지 아시나요;;
: : :
: : :
: : : 아래는 테스트에 사용 된 코드였습니다.
: : : void __fastcall TForm1::Button1Click(TObject *Sender)
: : : {
: : :     unsigned int Before;
: : :     double t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0;
: : :     double   loop = 10;
: : : for ( int i = 0; i < loop; ++i )
: : : {
: : :     Before = GetTickCount();
: : :     for ( int i = 0; i < 1000000; ++i )
: : :     {
: : :         AnsiString s = AnsiString( "s" );
: : :     }
: : :     t2 += ( GetTickCount() - Before );
: : :
: : :     Before = GetTickCount();
: : :     for ( int i = 0; i < 1000000; i++ )
: : :     {
: : :         AnsiString s = AnsiString( "s" );
: : :     }
: : :     t3 += ( GetTickCount() - Before );
: : :
: : :     Before = GetTickCount();
: : :     for ( int i = 1000000; i > 0; --i )
: : :     {
: : :         AnsiString s = AnsiString( "s" );
: : :     }
: : :     t4 += ( GetTickCount() - Before );
: : :
: : :     Before = GetTickCount();
: : :     for ( int i = 1000000; i > 0; i-- )
: : :     {
: : :         AnsiString s = AnsiString( "s" );
: : :     }
: : :     t5 += ( GetTickCount() - Before );
: : : }
: : :     Memo1->Lines->Add( FloatToStr( t1 / loop ) );
: : :     Memo1->Lines->Add( FloatToStr( t2 / loop ) );
: : :     Memo1->Lines->Add( FloatToStr( t3 / loop ) );
: : :     Memo1->Lines->Add( FloatToStr( t4 / loop ) );
: : :     Memo1->Lines->Add( FloatToStr( t5 / loop ) );
: : : }

+ -

관련 글 리스트
48108 ++, -- 연산자 처리 속도 질문 아루스 1116 2007/02/16
48116     Re:++, -- 연산자 처리 속도 질문 1704 2007/02/17
48113     Re:++, -- 연산자 처리 속도 질문 zi 1100 2007/02/17
48115         Re:Re:++, -- 연산자 처리 속도 질문 아루스 1154 2007/02/17
48121             Re:Re:Re:++, -- 연산자 처리 속도 질문 라스코니 1703 2007/02/19
48288                 Re:Re:Re:Re:++, -- 연산자 처리 속도 질문 쥐르미온 2715 2007/03/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.