最近須要對一個大數據塊進行壓縮傳輸,數據塊大小最大將近20個G,最小也就幾十M,波動範圍比較大。對於大塊數據壓縮後的存放上有點猶豫,對三種不一樣的數據結構進行測試,第一種爲STL中的vector,第二種爲全局緩衝區,第三種爲動態緩衝區。ios
測試代碼以下:sql
- #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向量速度最慢,使用全局最快,使用動態開闢空間的方式介於兩者之間。ide