jc01rho의 일상잡다

[C/실험] memset vs for 초기화. 속도 차이가 얼마나 날까? 본문

컴퓨터/C & C++

[C/실험] memset vs for 초기화. 속도 차이가 얼마나 날까?

jc01rho 2011. 11. 5. 23:51




 memset과 for반복 초기화의 속도 차이를 알아보기 위한 간단한 실험을 해보았습니다. 실험은 E5200 CPU/DDR2(SamSung) 2GB RAM에서 진행되었으며 결과를 정확하게 구하기 위해 1000번 반복하여 실험하였음을 밝힙니다.

 실험 결과

 





  1. #include <stdio.h>
  2. #include <memory.h>
  3. #include <time.h>
  4. #define KB    65536 // 256KB
  5. #define    MB    262144 // 1MB
  6.  
  7. int main(){
  8.  
  9.     int *arr;
  10.     clock_t t;
  11.     double time;
  12.     int i, j;
  13.     time = 0;
  14.  
  15.     for(i=0;i<1000;i++){
  16.         arr = new int[KB];
  17.         t = clock();
  18.         memset(arr, 100, KB*4);
  19.         time+=clock()-t;
  20.         delete []arr;
  21.     }
  22.     printf("memset으로 256KB 메모리를 100으로 초기화 : %.3fms(밀리초)\n"time/1000);
  23.     time = 0;
  24.     for(i=0;i<1000;i++){
  25.         arr = new int[KB];
  26.         t = clock();
  27.         for(= 0 ; j<KB;j++)
  28.             arr[i] = 100;
  29.         time+=clock()-t;
  30.         delete []arr;
  31.     }
  32.     printf("65536번 반복해서 256KB 메모리를 100으로 초기화 : %.3fms(밀리초)\n"time/1000);
  33.  
  34.     time=0;
  35.     for(i=0;i<1000;i++){
  36.         arr = new int[MB];
  37.         t = clock();
  38.         memset(arr, 100, MB*4);
  39.         time+=clock()-t;
  40.         delete []arr;
  41.     }
  42.     printf("memset으로 1MB 메모리를 100으로 초기화 : %.3fms(밀리초)\n"time/1000);
  43.     time = 0;
  44.  
  45.     for(i=0;i<1000;i++){
  46.         arr = new int[MB];
  47.         t = clock();
  48.         for(= 0 ; j< MB;j++)
  49.             arr[j] = 100;
  50.         time+=clock()-t;
  51.         delete []arr;
  52.     }
  53.     printf("262144번 반복해서 1MB 메모리를 100으로 초기화 : %.3fms(밀리초)\n"time/1000);
  54. }

     
### 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); 
}

Comments