jc01rho의 일상잡다
[C/실험] memset vs for 초기화. 속도 차이가 얼마나 날까? 본문
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);
- }
### cpp
#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);
}
'컴퓨터 > C & C++' 카테고리의 다른 글
Visual Studio2010 Copy & Paste 한글 깨짐 현상 해결 (0) | 2012.07.22 |
---|---|
비트열 뒤집기 - Bir reversal - MSB <-> LSB 스왑. 최적방법 (0) | 2012.07.08 |
Regular Expressions in VS2010 (0) | 2011.08.14 |
STL Iterator erase시 "vector iterators incompatible" (0) | 2011.07.19 |
LINK : warning LNK4098 : defaultlib "~~.lib" conflicts with use of other libs; use /NODEFAULTLIB:library (0) | 2011.05.31 |
Comments