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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[620] C/C++ for loop 최적화에 관한 이야기
주찬아빠 [k6709] 12710 읽음    2006-11-01 16:08
일반적으로 파스칼의 for loop 가 C++의 for loop보다 빠르다고 알려져 있습니다.

저는 이미지 프로세싱관련 일을 많이 하기떄문에 for loop 를 많이 사용하는편인데
장난삼아 파스칼과 C++로 동일한 내용을 코딩해 보면 파스칼이 2~3배정도
빠릅니다.

이유는 여러분도 잘아시다시피 파스칼에서는 for 구문자체가 비교를 하지 않기
때문일거라 추정해 봅니다.

C++ 에서는 주로 많이 코딩하시는 스타일이 가운데 블럭에서 카운터의 조건을
검사하기때문에 느려질거라 생각됩니다.

파스칼:

for i := 0 to Bitmap.Height-1 do
...

C++

for (int i = 0; i < Bitmap->Height; i++)
...

위와같은 형식이 아마도 많은분들이 코딩하시는 스타일 일거라 생각됩니다.

하지만 다음과 같이 for 구문을 수정하면 파스칼과 동일한 속도다 나옵니다.

for (int ic=Bitmap->Height, i=0; ic--; i++)
...

파스칼처럼 i값에 대한 비교가 아니라 단지  Counter ic의 값이 0인지 아닌지만
체크 하도록 바꾼겁니다.

많은 분들이 델파이가 빠르냐 VC가 빠르냐 이런문제로 싸우시던데
정작 C++로 파스칼로 속도를 낼수 있는 기법에 대하여 이야기가 없길래
혹시 초보분들한테는 유용한 정보가 되지 않을까 해서 올려봅니다.

전부 다아시는 내용을 올려서 좀 쑥스럽네요.
초보분들이 속도 최적화에 도움이 되셨으면 좋겠습니다.
저도 물론 초보지만 ;;
김상면 [windyboy]   2006-11-04 18:23 X
그건 C기초 문법 시간에 가르키는 거쟎아요...
for문 자체는 속도가 느리므로 while등으로 바꾸라고...

설마 고수님들이 그걸 몰라서 옥신 각신 하는거는 아니겠지요
어째 좀 미심적습니다. 그려....


하지만 조건치를 님과 같이 바꾸므로써 속도를 올릴수 있다니...
저도 for문을 많이 사용해야 겠습니다.

흐....

그럼
금목암 [iconms1]   2006-11-06 11:40 X
void Dly20ns(uchar dcnt)
{
//    if (dcnt==0) return;        //
    dcnt=160;
    do {
        _nop_();
    } while(--dcnt);       
제가 마이콤에서 쓰는 방식인데 요런식으로 쓰시면 더 빨라집니다
어셈블러로 번역해서 보아도 cpu의 4클럭 안에 처리 끝납니다
주찬아빠 [k6709]   2006-11-06 14:17 X
제의견에 그새 리플이 이만큼이나 달리다니.. 감사합니다 ^^

우연히 델마당 게시판을 보니 for loop를 이용한 프로그램으로 VC와 서로가 속도비교가 있길래 같은 for loop 라도 이런 방법도 있단 취지로 올려본 글입니다 ^^

많은분들이 파스칼의 for를 C++로 똑같이 코딩하고서는 속도를 비교 하시려고 하길래
한번 for loop를 수정해본겁니다.

그리고 while문을 쓸려면 약간 코딩상의 귀찮은점도있고 해서 C++의 for loop로도
간편히 비등한 속도를 낼수 있다는 취지에서 올려본 글입니다.

모두들 행복한 하루 되세요
김상면 [windyboy]   2006-11-08 07:29 X
아뭏튼 저에게는 유용한 정보임에는 분명합니다.
그럼
둘리 [dooly386]   2007-02-11 01:11 X
원인은 Bitmap->Height 가 property call 이기 때문 입니다.
즉 루프를 돌때마다 Bitmap->Height 에 연결된 함수를 항상 호출하기 때문입니다.
이를 변수로 담아 두었다가 변수 참조를 하면 빠른것이죠..
이는 TList 의 루프에서도 마찬가지입니다.
for 문이 느려서가 아니라 for문의 조건 판정에 property 를 참조하기 때문에 property call 이 너무 많이 발생해서 입니다.
장성호 [nasilso]   2009-12-14 00:21 X
둘리님이 핵심을 얘기하셨네요..

  문론 Delphi의 for문이 빠르긴 합니다.
    Delphi에서는 증감자를 register를 이용하고
    for문도 실제 컴파일 결과가 do-while구문처럼 동작하구요..

  하지만 위 코드에서 delphi와 C++의 속도차이의 가장큰 이유는
  둘리님이 말씀하신것이 핵심적인 이유이네요  

+ -

관련 글 리스트
620 C/C++ for loop 최적화에 관한 이야기 주찬아빠 12710 2006/11/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.