最近需要对一个大数据块进行压缩传输,数据块大小最大将近20个G,最小也就几十M,波动范围比较大。对于大块数据压缩后的存放上有点犹豫,对三种不同的数据结构进行测试,第一种为STL中的vector,第二种为全局缓冲区,第三种为动态缓冲区。
测试代码如下:
- #include<iostream>
- #include<string>
- #include<vector>
- #include<sys/time.h>
- using namespace std;
- const long N=1000000000;
- unsigned char bytes_array[N];
- unsigned char * bytes_array_dynamic;
- struct timeval start,end;
- void startTimer()
- {
- gettimeofday(&start,NULL);
- }
- void stopTimer()
- {
- gettimeofday(&end,NULL);
- }
- int getMs()
- {
- return (end.tv_sec - start.tv_sec)*1000 + (end.tv_usec-end.tv_usec)/1000;
- }
- int main()
- {
- long i;
- startTimer();
- vector<unsigned char> v(N);
- v.reserve(N);
- for(i=0;i<N;i++)
- v.push_back(12);
- stopTimer();
- cout<<getMs()<<endl;
- startTimer();
- for(i=0;i<N;i++)
- bytes_array[i]=12;
- stopTimer();
- cout<<getMs()<<endl;
- startTimer();
- bytes_array_dynamic = (unsigned char *)malloc(sizeof(unsigned char)*N);
- for(i=0;i<N;i++)
- bytes_array_dynamic[i] = 12;
- stopTimer();
- cout<<getMs()<<endl;
- return 0;
- }
运行结果如下:
- 15000
- 3000
- 6000
可见使用vector向量速度最慢,使用全局最快,使用动态开辟空间的方式介于二者之间。
本文转自hipercomer 51CTO博客,原文链接:http://blog.51cto.com/hipercomer/801643