|
프로그램을 짜는 중.. 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()보다 더 빨리 복사할 수 있는 함수가 있을까요?
또는 획기적으로 속도를 올릴 수 있는 방법이 있으면 좀 알려주시면 정말로.. 정말로 감사하겠습니다..
부탁드립니다... (__)
내용추가----------------------------
다음과 같이 테스트를 해봤는데요...
memset()를 총 4000*1000번을 수행합니다.. 수행 시간은 대략 0.5초 나옵니다.
0.5초 나오는것을 0.1초로 할 수 있는 방법이 있을까요??
속도를 무조건 올려야 합니다... ㅠㅠ
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <mem.h>
const int nSIZE = 5;
int initData[4000*1000];
int Data[4000*1000*5];
void Check()
{
int k, kmax= sizeof(initData)/sizeof(initData[0]);
int *p = Data;
for(k=0; k<kmax; k++)
{
memset( &Data[k*nSIZE], initData[k], nSIZE );
}
}
int main()
{
clock_t start, end;
start = clock();
Check();
end = clock();
cout << (end - start)/CLK_TCK << endl;
system("PAUSE");
return 0;
}
|