vector<char>和string、char*性能差异对比
来源:互联网 发布:neural style java 编辑:程序博客网 时间:2024/05/22 05:24
c++,经常用到缓存,但缓存如何定义呢,一般我们使用void* 或char *作为存储的基本类型,对的缓存的操作定义也有多种方式,本文就常用的几种方式做了一个测试对比,看看每种方式具有什么样的性能和特点。首先看看如下测试代码:
#define NUM (100*10000)typedef basic_string<char> bstring;void teststring(){bstring bs;int nval=4;long begint= GetTickCount();for (int i=0;i<NUM;i++){bs.append((char*)&nval,sizeof(int));}long endt= GetTickCount();;printf("basic_string time:%d\n",(endt-begint));vector<int > vchar;begint= GetTickCount();for (int i=0;i<NUM;i++){vchar.push_back(nval);}endt= GetTickCount();;printf("vector time:%d\n",(endt-begint));string str;begint= GetTickCount();for (int i=0;i<NUM;i++){str.append((char*)&nval,sizeof(int));}endt= GetTickCount();;printf("str time:%d\n",(endt-begint));long maxlen=NUM*1;char *test=new char[maxlen];begint=GetTickCount();long len=0;for (int i=0;i<NUM;i++){if (len+sizeof(nval)>maxlen){maxlen=len+(len/i)*(NUM-i);test=(char*)realloc(test,maxlen);if (!test){return;}}memcpy(test+i*4,&nval,sizeof(int));len+=sizeof(int);}endt=GetTickCount();printf("char time:%d\n",(endt-begint));delete[] test;}
我们将int值当成4字节的字符存储在内存中,
运行测试结果如下另NUM=10*10000
basic_string time:94
vector time:93
str time:94
char time:0
修改NUM=100*10000
basic_string time:889
vector time:920
str time:874
char time:31
其中:
- typedef basic_string<char> bstring; 模板类
- vector<char >容器类
- string str;动态分配
- char *test=new char[maxlen];字符数组,通过realloc进行动态分配内存
1、用传统的字符数组进行海量(百万、千万次以上)字符操作,它具有绝对的优势。
2、但是在数量级较小(如十万级别以下)的情况下,char虽然性能仍然胜出,但需要自己管理内存,bstring、string虽然性能不级char,但耗时已在十几毫秒左右,对性能影响不大,但bstring、string提供了丰富的字符串操作如查找、替换等,减轻了程序员的工作负担,同时安全性也大大提高。
3、vector用于内置类型,性能最低,不推荐他作为缓存的操作,一般用于复杂的结构体保存较为方便。
- vector<char>和string、char*性能差异对比
- CString string和char* 对比
- vector<char*>和vector<string>的不同
- vector<char> to string
- string 和 const char* 的性能比较
- char*,const char*和string
- vector<string>转换为char*[]
- char和varchar2对比
- C++ vector模板与string 和 char 之间相互转换
- 用vector来转换string和unsigned char
- C++ vector模板与string 和 char 之间相互转换
- char 转 string、vector 与 string互转
- char*和string
- char数组和string
- String和char
- 还是string和char
- STL---string和char
- Java--String 和 char[]
- Oracle11g RAC开启关闭、设置归档
- 不要在init和dealloc函数中使用属性方法
- 在windows下配置svn服务器
- XP安装IIS的详细过程
- android中platform-tools和tools的区别
- vector<char>和string、char*性能差异对比
- 华为C8650+升级电信定制版失败
- android 蓝牙知识(转帖)
- linux查看软件包最新版本的命令
- jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space
- Please ensure that adb is correctly located at问题解决
- SAP BASIS TCODE
- 字符串比较
- Spring JdbcTemplate Querying Examples