社区
C++ 语言
帖子详情
关于char *和 string的效率问题
zpk1234
2007-11-03 03:22:10
两个效率谁高啊,在我的机子上测试是前者高,而C++primer 上说的是后者高,有点不一样
...全文
379
14
打赏
收藏
关于char *和 string的效率问题
两个效率谁高啊,在我的机子上测试是前者高,而C++primer 上说的是后者高,有点不一样
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
好象差的挺多的啊
java六大必须理解的
问题
文档
java六大必须理解的
问题
、内容比较详细、写的比较具体
char
*转
string
的
问题
在工作中遇到一个
char
*转
string
的
问题
,现描述如下: 首先,声明一个
char
*的变量,例如:
char
* buffer = new
char
[100]; 当buffer转为
string
时,如果这样写
string
str1=buffer;直接强制转换,
string
就会把buffer当成指针,取得buffer的长度就是指针的长度4,也就是str1中的内容就是buffer的前4个字节,后面的...
C++ 中
string
和
char
* 的区别
1、定义:
string
:
string
是STL当中的一个容器,对其进行了封装,所以操作起来非常方便。
char
*:
char
*是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了。 2、区别:
string
的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存
问题
。
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,pp); 2,
char
*转换为const
char
*可以直接赋值
C++中
string
、
char
[]、
char
*之间的转换
目录 1、
char
[]、
char
*转
string
2、
string
转
char
*、
char
[] 1、
char
[]、
char
*转
string
char
[]、插入*转
string
比较简单,直接赋值即可进行转换 #include<iostream> #include<
string
> using namespace std; int main() { strin...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章