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
[52840] Re:memccpy()는 제가 원하는 기능이.... 좀더 생각해보고.. 테스트해 보고 대답하시지...
장성호 [nasilso] 1369 읽음    2008-03-21 19:11
...

char a[]={'0','1','2','3','4','5','6','7','8','9'};
char b[100];
void __fastcall TForm1::Button4Click(TObject *Sender)
{
    int tick=GetTickCount();
    for(int k=0;k<1000000;k++)
        for(int i=0;i<10;i++)
            memset(&b[i*10],a[i],10);

    ShowMessage(IntToStr(GetTickCount()-tick));
}

위와같이 100만번 copy하는데 제 노트북에서는 평균 260ms정도 걸리네요.


그런데...

초기화할 크기 100Byte를 한번 초기화 시켜놓고...
char a[]={'0','1','2','3','4','5','6','7','8','9'};
char b[100];
char a1[100];
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    for(int i=0;i<10;i++)
        memset(&a1[i*10],a[i],10);
}

// memmove로 초기화하니 100만번 하는데 평균 30ms정도 걸리네요
void __fastcall TForm1::Button5Click(TObject *Sender)
{
    int tick=GetTickCount();
    for(int k=0;k<1000000;k++)
        memmove(b,a1,100);
    ShowMessage(IntToStr(GetTickCount()-tick));
}


위의 경우에 memmove가 memset보다 얼추 8배이상  빠르네요..

그럼...




이용태 님이 쓰신 글 :
: 금목암 님이 쓰신 글 :
: : 이용태 님이 쓰신 글 :
: : : 프로그램을 짜는 중.. memset()를 이용한 데이터 복사를 하고 있습니다.
: : :
: : : 예를 들면 다음과 같습니다.
: : :
: : : 다음과 같은 10개의 데이터를 갖고 있는 a[10]라는 배열이 있다고 해보죠.
: : :
: : : a[10]
: : : ___________________
: : : 0|1|2|3|4|5|6|7|8|9
: : : -------------------
: : :
: : : 그리고 a[]보다 10배 큰 b[100]이 있다고 해보죠.
: : :
: : : a[]의 각 요소를 memset()를 이용하여 b[]에 다음과 같이 복사합니다.
: : :
: : : for(int i = 0; i < 10; i++)
: : :    memset(b, a[i], 10);
: : :
: : : 이렇게 한다면 b[]엔 다음과 같이 데이터가 들어가 있겠죠..
: : :
: : : b[200]
: : : __________________________________________________________________________________________________
: : : 0|0|0|0|0|0|0|0|0|0|1|1|1|1|1|1|1|1|1|1|1|----중간생략---8|8|8|8|8|8|8|8|8|8|9|9|9|9|9|9|9|9|9|9|
: : : --------------------------------------------------------------------------------------------------
: : :                                                                       
: : : 그런데... 이게 전체 memset()하는 횟수가 적을땐 상관이 없는데... memset()하는 횟수가 커지게 되면 시간이 많이 걸리게 되더군요..
: : :
: : : 만약 memset() 한번 하는 시간이 0.001초라 그러면... 2000번 하면... 2초가 걸리게 됩니다.
: : :
: : : 이렇게 되면 한번 작업 할때마다 2초씩 기달려야 하니... 대략 짜증이 납닌다.
: :
: : memset이 아니고 memccpy 쓰면 되겠네요
: : :
: : : memset()보다 더 빨리 복사할 수 있는 함수가 있을까요?
: : :
: : : 또는 획기적으로 속도를 올릴 수 있는 방법이 있으면 좀 알려주시면 정말로.. 정말로 감사하겠습니다..
: : :
: : : 부탁드립니다... (__)
: : -----------------------------------------
: : memset이 아니고 memccpy 쓰면 되겠네요
: : 포인트로 복사하세요

+ -

관련 글 리스트
52822 memset()보다 더 빠른 함수가 없을까요?(내용 추가 했습니다..) 이용태 1689 2008/03/21
52824     Re:memset()보다 더 빠른 함수가 없을까요? 금목암 1566 2008/03/21
52838         memccpy()는 제가 원하는 기능이 아닌거 같네요.. 암튼 감사합니다.(냉무) 이용태 1354 2008/03/21
52840             Re:memccpy()는 제가 원하는 기능이.... 좀더 생각해보고.. 테스트해 보고 대답하시지... 장성호 1369 2008/03/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.