关于vector性能的测试(一)

     最近需要对一个大数据块进行压缩传输,数据块大小最大将近20个G,最小也就几十M,波动范围比较大。对于大块数据压缩后的存放上有点犹豫,对三种不同的数据结构进行测试,第一种为STL中的vector,第二种为全局缓冲区,第三种为动态缓冲区。

     测试代码如下:

      

  
  
  
  
  1. #include<iostream> 
  2. #include<string> 
  3. #include<vector> 
  4. #include<sys/time.h> 
  5. using namespace std; 
  6. const long  N=1000000000; 
  7. unsigned char bytes_array[N]; 
  8. unsigned char * bytes_array_dynamic; 
  9. struct timeval start,end; 
  10. void startTimer() 
  11.     gettimeofday(&start,NULL); 
  12. void stopTimer() 
  13.     gettimeofday(&end,NULL); 
  14. int getMs() 
  15.     return  (end.tv_sec - start.tv_sec)*1000 + (end.tv_usec-end.tv_usec)/1000; 
  16. int main() 
  17.     long i; 
  18.      
  19.     startTimer(); 
  20.     vector<unsigned char> v(N); 
  21.     v.reserve(N); 
  22.     for(i=0;i<N;i++) 
  23.         v.push_back(12); 
  24.     stopTimer(); 
  25.     cout<<getMs()<<endl; 
  26.      
  27.     startTimer(); 
  28.     for(i=0;i<N;i++) 
  29.         bytes_array[i]=12; 
  30.     stopTimer(); 
  31.     cout<<getMs()<<endl; 
  32.  
  33.     startTimer(); 
  34.     bytes_array_dynamic = (unsigned char *)malloc(sizeof(unsigned char)*N); 
  35.     for(i=0;i<N;i++) 
  36.         bytes_array_dynamic[i] = 12; 
  37.     stopTimer(); 
  38.     cout<<getMs()<<endl; 
  39.  
  40.     return 0; 

    运行结果如下:

     

  
  
  
  
  1. 15000 
  2. 3000 
  3. 6000 

    可见使用vector向量速度最慢,使用全局最快,使用动态开辟空间的方式介于二者之间。

本文出自 “相信并热爱着” 博客,转载请与作者联系!

你可能感兴趣的:(关于vector性能的测试(一))