社区
C++ 语言
帖子详情
关于char *和 string的效率问题
zpk1234
2007-11-03 03:22:10
两个效率谁高啊,在我的机子上测试是前者高,而C++primer 上说的是后者高,有点不一样
...全文
320
14
打赏
收藏
关于char *和 string的效率问题
两个效率谁高啊,在我的机子上测试是前者高,而C++primer 上说的是后者高,有点不一样
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
loops
2007-11-05
打赏
举报
回复
debug和release差别很大,比如调用函数的时候,debug下面要将函数所分配的栈都置为0xcccccccch,string调用的函数要比上面的new和delete多得多,因此首先在这方面开销就大,其他微软为了发现错误,还在debug下增加了很多代码,比如检查栈等等。尽管debug下new和delete也有这方面的额外开销,但是string更加复杂,做得更多,导致这些额外的开销掩盖了实质。
zpk1234
2007-11-05
打赏
举报
回复
Release和Debug有什么区别啊,在Release下后者是前者的1/3,而在Debug下后者比前者稍多,这是为什么?
jxlczjp77
2007-11-05
打赏
举报
回复
使用char *,就不得不检查有效性.
而用string的话假设它是安全的,不再需要额外检测.
这就与引用和指针一样,引用默认总是需要指向一个对象,所以使用时不需要再额外检查(当然了,这并不绝对,比如引用到一个失效的指针)。而使用指针则几乎总是需要测试有效性.
yuyunliuhen
2007-11-04
打赏
举报
回复
测试后者快点
g961681
2007-11-04
打赏
举报
回复
up
loops
2007-11-04
打赏
举报
回复
换在Release下试试。Debug下面函数调用的开销太大,误差大。
我在vc6 release下,后者时间只是前者的三分之一。
毕竟COW机制要比反复new和delete高效多了。
cctdbnj
2007-11-03
打赏
举报
回复
楼主用的什么编译器,我用dev-c++时后者耗时少些,分别是:328,172;而用vc分别是843,938
tangshuiling
2007-11-03
打赏
举报
回复
严格来说:char*比string还是要快点,只是微不足道。起码string类还要调用构造,析构甚至拷贝构造函数等!
就安全性来说,用string比用char*要来的更加稳当。牺牲了微弱的时间保证了安全性,评价嘛一个字———值!
Lstyk
2007-11-03
打赏
举报
回复
标准库中的string不知道具体是如何实现的,感觉应该是链表一类的,我觉得对于赋值、访问一类的操作,数组会快一些,而对于那些要在串后面增添成员的操作,考虑到数组要确定有足够的空间(否则要重新定义数组,分配空间,然后复制到新数组),string应该更方便、快一些。
或许是这样吧。
zpk1234
2007-11-03
打赏
举报
回复
请问nevergone 该如何测试
CedarDiao
2007-11-03
打赏
举报
回复
你在Win32测速是不会很准的,建议LZ将以上测速语句中的执行体反复执行10000次,放大结果看看
shizhiqing2003
2007-11-03
打赏
举报
回复
呵呵,当然要差点了
nevergone
2007-11-03
打赏
举报
回复
你不能这样比较呀
zpk1234
2007-11-03
打赏
举报
回复
贴上代码:
#include <iostream>
#include <string>
#include <cstring>
#include <cstddef>
#include <ctime>
using namespace std ;
const int N = 1000000 ;
int main()
{
const char *pc = "a very long literal string" ;
const size_t len = strlen( pc) + 1 ;
double start,finish; // 开始时间,结束时间
start=(double)clock();
for( size_t i = 0 ; i != N; ++i )
{
char *pc2 = new char[len+1] ;
strcpy(pc2,pc) ;
if( strcmp(pc2,pc) ) ;
delete [] pc2 ;
}
finish=(double)clock();
cout<<"所用的时间为(毫秒):"<<finish - start<<endl ;
string str("a very long literal string") ;
start=(double)clock();
for( i = 0 ; i != N; ++i )
{
string str2 = str ;
if( str2 != str ) ;
}
finish=(double)clock();
cout<<"所用的时间为(毫秒):"<<finish - start<<endl ;
return 0 ;
}
运行时间为:
前者: 766
后者: 890
好象差的挺多的啊
MySQL 数据类型和运算符
============================= # 数据类型 整数类型:五种 TINY SMALL MEDIUM INT BIG 浮点和定点小数类型:三种 FLOAT DOUBLE DECIMAL 日期与时间数据类型:五种 YEAR -1 字符串类型:二种
CHAR
(M) VAR
CHAR
(M) -1 ...
C++ 中
string
和
char
* 的区别
1、定义:
string
:
string
是STL当中...
char
*的内存管理由用户自己处理,很容易出现内存不足的
问题
。 当我们要存一个串,但是不知道其他需要多少内存时, 用
string
来处理就最好不过了。 当你知道了存储的内存的时候,可
const
char
*,
char
*和
string
之间的转换
const
char
*和
char
*,还有
string
之间的转换为: 1,const
char
*转换为
char
*就是首先申请一段空间,然后复制进去,不能直接赋值是因为const const
char
*pp="aaa";
char
*p=new
char
[enoughspace]; strcpy(p...
关于const
char
*和
char
*、const
char
** 和
char
** 赋值
问题
根据ANSI C标准的赋值约束条件: ...一、const
char
*和
char
* const
char
*的类型是:“指向一个具有const限定符的
char
类型的指针”。(不能修改其值)
char
*的类型是:“指向一个
char
类型的指
c++ 中
char
与
string
之间的相互转换
问题
首先必须了解,
string
可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的
string
类提供了STL容器接口。...1、将
char
*或者
char
[]转换为
string
可以...
C++ 语言
64,282
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章