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
[29661] Re:[질문]++Ddd.Ccc.Bbb.Aaa.aaa와 ++AAa->aaa 의 차이..
Starlet [starlet5] 732 읽음    2004-05-07 21:05
안녕하세요. 재미있는 실험을 하셨군요^^
제가 돌려보니 ++Ddd.Ccc.Bbb.Aaa.aaa와 ++AAa->aaa 가 같은 시간이 걸리는것 같습니다.
초기화를 하던 안하던 첫번째가 빨리 될때가 있고 두번째가 빨리 될때도 있습니다. 이 시간차는 시간 계산하는 중에 발생하는것으로 보이고 초기화에 상관없이 ++Ddd.Ccc.Bbb.Aaa.aaa와 ++AAa->aaa 는 같다고 보시면 됩니다.
실제 디스어셈블 시켜 코드를 보면 for 문으로 들어가기전에 이미 ++Ddd.Ccc.Bbb.Aaa.aaa와 ++AAa->aaa의 주소는 다 계산되어 레지스터에 저장된 후 for문 안에선는 이 주소에 있는 값을 단순히 증가시키는 일만 합니다. 실제 디스어셈블시킨 코드상에서도 두 방식이 for문 안에서는 같은 코드입니다. 단지 주소를 저장하고 있는 레지스터가 틀린것 뿐인데 레지스터들도 각각이 특기가 있어서 시간차가 조금은 있지만 예전 XT 컴퓨터가 아닌 이상 무시할 정도로 작다고 보시면 됩니다.

결론-> 운영체제가 작업 분할 중에 발생되거나 시간 계산중에 발생된 오차일 뿐 같은 시간이 걸립니다.^^

최민희 님이 쓰신 글 :
: -------------------------------------------------
:     typedef struct AAAAA
:     {
:         int aaa;
:         int bbb;
:         int ccc;
:     }AAA;
:
:     typedef struct BBBBB
:     {
:         int aaa;
:         int bbb;
:         int ccc;
:         AAA Aaa;
:     }BBB;
:
:     typedef struct CCCCC
:     {
:         int aaa;
:         int bbb;
:         int ccc;
:         BBB Bbb;
:     }CCC;
:
:     typedef struct DDDDD
:     {
:         int aaa;
:         int bbb;
:         int ccc;
:         CCC Ccc;
:     }DDD;
:
:     DDD Ddd;
:
:     Ddd.Ccc.Bbb.Aaa.aaa = 0;
:     int itime = GetTickCount();
:     for(int i=0; i<10000000; i++)
:     {
:         ++Ddd.Ccc.Bbb.Aaa.aaa;
:     }
:     itime = GetTickCount() - itime;
:     Memo1->Lines->Add("---1----" + IntToStr(Ddd.Ccc.Bbb.Aaa.aaa));
:     Memo1->Lines->Add(itime);
:
:
:     AAA *AAa;
:     AAa = &Ddd.Ccc.Bbb.Aaa;
:     AAa->aaa = 0;
:     itime = GetTickCount();
:     for(int i=0; i<10000000; i++)
:     {
:         ++AAa->aaa;
:     }
:     itime = GetTickCount() - itime;
:     Memo1->Lines->Add("---2----" + IntToStr(AAa->aaa));
:     Memo1->Lines->Add(itime);
: -----------------------------------------------------------------
:
:
:
:  ++Ddd.Ccc.Bbb.Aaa.aaa;
:  ++AAa->bbb;
: 이 두게 중 어느게 더 빠를까 보다가
: AAa->bbb = 0;
: Ddd.Ccc.Bbb.Aaa.aaa = 0;
: 이렇게 초기화를 하고 실행하면 ++AAa->bbb; 이렇게 쓰는게 느리고
: 초기화를 빼고 하면 ++Ddd.Ccc.Bbb.Aaa.aaa; 이게 더 느리고
: 하네요 왜 그런지 아시는 분 설명좀 부탁드립니다.
: 그냥 궁금합니다..
:

+ -

관련 글 리스트
29656 [질문]++Ddd.Ccc.Bbb.Aaa.aaa와 ++AAa->aaa 의 차이.. 최민희 682 2004/05/07
29661     Re:[질문]++Ddd.Ccc.Bbb.Aaa.aaa와 ++AAa->aaa 의 차이.. Starlet 732 2004/05/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.