当前位置: 首页 > news >正文

关于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向量速度最慢,使用全局最快,使用动态开辟空间的方式介于二者之间。



本文转自hipercomer 51CTO博客,原文链接:http://blog.51cto.com/hipercomer/801643

相关文章:

  • 重装linux服务器后开不了机
  • Linux TC的ifb原理以及ingress流控
  • linux--mariadb数据库
  • nginx开启后主机无法访问虚拟机的nginx解决方案
  • Linux 特殊目录
  • MPLS TE第一步:创建基本TE隧道
  • mysql5.6之key_buffer_size优化设置
  • 使用yum安装MariaDB
  • Oracle Goldengate Director软件截面图
  • Spring4-自动装配Beans-按属性名称自动装配
  • Office 365管理员快速上手手册
  • centos 系统管理维护指南
  • phpcms v9 添加内容出现500错误
  • ElasticSearch vs 关系型数据库
  • 【Kafka源码】broker被选为controller之后的连锁反应
  • java2019面试题北京
  • javascript 哈希表
  • js正则,这点儿就够用了
  • Laravel 实践之路: 数据库迁移与数据填充
  • mysql外键的使用
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Theano - 导数
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 分类模型——Logistics Regression
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 前端攻城师
  • 前端性能优化——回流与重绘
  • 微信开放平台全网发布【失败】的几点排查方法
  • 一个SAP顾问在美国的这些年
  • # Panda3d 碰撞检测系统介绍
  • ###C语言程序设计-----C语言学习(6)#
  • $.ajax()
  • (二)WCF的Binding模型
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (四)Controller接口控制器详解(三)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)Linux网络编程入门
  • .NET 8.0 中有哪些新的变化?
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net中的集合
  • @RequestMapping处理请求异常
  • [ACM] hdu 1201 18岁生日
  • [Android] Upload package to device fails #2720
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [C/C++]数据结构 循环队列
  • [CCIE历程]CCIE # 20604
  • [C语言]——柔性数组
  • [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包
  • [gdc19]《战神4》中的全局光照技术
  • [hive]中的字段的数据类型有哪些