C/C++ 에서 메모리 복사를 위해서 사용하는 함수로 memcpy() 함수가 있습니다.
for 나 while 과 같은 루프를 이용해서 메모리를 복사 할 수 도 있지만, memcpy() 함수를 이용하는 것이 속도 면에서 월등히 빠르다고 하더군요.
그래서 오늘 포스팅에서는 memcpy() 와 루프 문을 이용한 메모리 복사의 속도 비교를 해 보려 합니다.
memcpy() 함수는 string.h 에 정의 되어 있고 그 원형은 다음과 같습니다.
void * memcpy ( void * destination, const void * source, size_t num );
source 에서 destination 으로 num 만큼을 복사 하는 간단한 형태입니다.
비교를 위해서 배열의 크기에 따른 시뮬레이션을 수행해 봤고, 시험 횟수는 1000000 회를 수행해서 메모리 복사에 걸리는 시간들의 평균을 구해 봤습니다.
코드는 다음과 같습니다.
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <fstream>
#include <math.h>
using namespace std;
int main()
{
time_t start,end;
double dif, average_time,average_time1, sum_time;
unsigned k, i;
unsigned N_sim, N_buffer;
ofstream fout("abc.txt");
N_sim=1000000;
int * test1;
int * test2;
int N;
for (N=10;N<17;N++)
{
N_buffer=(unsigned)pow(2,N);
test1 = new int[N_buffer];
test2 = new int[N_buffer];
// use for loop
sum_time=0;
for (k=0;k<N_sim;k++)
{
time(&start); // start time
for (i=0;i<N_buffer;i++)
{
test1[i]=test2[i];
}
time(&end);
dif = difftime(end,start);
sum_time+=dif;
}
average_time=sum_time/(double)N_sim;
// use memcpy
sum_time=0;
for (k=0;k<N_sim;k++)
{
time(&start); // start time
memcpy(test2, test1,N_buffer*sizeof(int));
time(&end);
dif = difftime(end,start);
sum_time+=dif;
}
average_time1=sum_time/(double)N_sim;
fout << N_buffer << "\t" << average_time << "\t" << average_time1 << endl;
cout << N_buffer << "\t" << average_time << "\t" << average_time1 << endl;
delete []test1;
delete []test2;
}
fout.close();
return 0;
}
시뮬레이션 시간을 측정 해보니 실제로 시간 차이가 꽤 많이 나더군요.
컴퓨터 성능에 따라 차이는 있겠지만, 제 컴퓨터의 경우 for 루프를 이용한 경우에 비해 memcpy() 함수를 이용한 경우가 거의 5 배 정도 빠르다는 것을 알 수 있었습니다.
'컴퓨터일반' 카테고리의 다른 글
deque 이용 Memory shift 실험 (2) | 2012.08.15 |
---|---|
자바 환경변수 설정 (0) | 2012.08.11 |
C/C++ memmove() 함수 속도 실험 (4) | 2012.08.06 |
Codeblock 에서 DLL 사용하기 (0) | 2012.07.31 |
C/C++ 동적 할당 배열 인덱스 1부터 시작하기 (0) | 2012.06.21 |
Perl YouTube download (0) | 2012.06.17 |
GoldWave command line 명령 이용하기 (0) | 2012.06.05 |
Visual studio 에서 math.h 정의시 상수 사용 방법 (0) | 2012.06.03 |
댓글