vector<char>和string、char*性能差异对比

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

其中:

  1. typedef basic_string<char> bstring; 模板类
  2. vector<char >容器类
  3. string str;动态分配
  4. char *test=new char[maxlen];字符数组,通过realloc进行动态分配内存
从上面测试结果看出

1、用传统的字符数组进行海量(百万、千万次以上)字符操作,它具有绝对的优势。

2、但是在数量级较小(如十万级别以下)的情况下,char虽然性能仍然胜出,但需要自己管理内存,bstring、string虽然性能不级char,但耗时已在十几毫秒左右,对性能影响不大,但bstring、string提供了丰富的字符串操作如查找、替换等,减轻了程序员的工作负担,同时安全性也大大提高。

3、vector用于内置类型,性能最低,不推荐他作为缓存的操作,一般用于复杂的结构体保存较为方便。




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值