|
...
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 쓰면 되겠네요
: : 포인트로 복사하세요
|