http://gallerc.tistory.com/263
memset과 for반복 초기화의 속도 차이를 알아보기 위한 간단한 실험을 해보았습니다. 실험은 E5200 CPU/DDR2(SamSung) 2GB RAM에서 진행되었으며 결과를 정확하게 구하기 위해 1000번 반복하여 실험하였음을 밝힙니다.
#include <stdio.h>
#include <memory.h>
#include <time.h>
#define KB 65536 // 256KB
#define MB 262144 // 1MB
int main(){
int *arr;
clock_t t;
double time;
int i, j;
time = 0;
for(i=0;i<1000;i++){
arr = new int[KB];
t = clock();
memset(arr, 100, KB*4);
time+=clock()-t;
delete []arr;
}
printf("memset으로 256KB 메모리를 100으로 초기화 : %.3fms(밀리초)n", time/1000);
time = 0;
for(i=0;i<1000;i++){
arr = new int[KB];
t = clock();
for(j = 0 ; j<KB;j++)
arr[i] = 100;
time+=clock()-t;
delete []arr;
}
printf("65536번 반복해서 256KB 메모리를 100으로 초기화 : %.3fms(밀리초)n", time/1000);
time=0;
for(i=0;i<1000;i++){
arr = new int[MB];
t = clock();
memset(arr, 100, MB*4);
time+=clock()-t;
delete []arr;
}
printf("memset으로 1MB 메모리를 100으로 초기화 : %.3fms(밀리초)n", time/1000);
time = 0;
for(i=0;i<1000;i++){
arr = new int[MB];
t = clock();
for(j = 0 ; j< MB;j++)
arr[j] = 100;
time+=clock()-t;
delete []arr;
}
printf("262144번 반복해서 1MB 메모리를 100으로 초기화 : %.3fms(밀리초)n", time/1000);
}
#include <memory.h>
#include <time.h>
#define KB 65536 // 256KB
#define MB 262144 // 1MB
int main(){
int *arr;
clock_t t;
double time;
int i, j;
time = 0;
for(i=0;i<1000;i++){
arr = new int[KB];
t = clock();
memset(arr, 100, KB*4);
time+=clock()-t;
delete []arr;
}
printf("memset으로 256KB 메모리를 100으로 초기화 : %.3fms(밀리초)n", time/1000);
time = 0;
for(i=0;i<1000;i++){
arr = new int[KB];
t = clock();
for(j = 0 ; j<KB;j++)
arr[i] = 100;
time+=clock()-t;
delete []arr;
}
printf("65536번 반복해서 256KB 메모리를 100으로 초기화 : %.3fms(밀리초)n", time/1000);
time=0;
for(i=0;i<1000;i++){
arr = new int[MB];
t = clock();
memset(arr, 100, MB*4);
time+=clock()-t;
delete []arr;
}
printf("memset으로 1MB 메모리를 100으로 초기화 : %.3fms(밀리초)n", time/1000);
time = 0;
for(i=0;i<1000;i++){
arr = new int[MB];
t = clock();
for(j = 0 ; j< MB;j++)
arr[j] = 100;
time+=clock()-t;
delete []arr;
}
printf("262144번 반복해서 1MB 메모리를 100으로 초기화 : %.3fms(밀리초)n", time/1000);
}
그리고 memset은 1바이트씩 하는거라 4*kb 하면 공평한 측정이 아닌 거 같네요
int 를 char 로 바꾸고 횟수를 똑같이해야 맞는거 같네요