C vs C性能(用于处理短字符串)

C vs C性能(用于处理短字符串),第1张

概述编辑 我的测试结果是here.虽然有人坚持我的测试是完全错误的,但C比C慢110%;( 最近,Bjarne Stroustrup写了Five Popular Myths about C++ 在他的文章中,他用C和C实现了一个函数 C版 string compose(const string& name, const string& domain){ return name+'@'+domai 编辑

我的测试结果是here.虽然有人坚持我的测试是完全错误的,但C比C慢110%;(

最近,Bjarne Stroustrup写了Five Popular Myths about C++

在他的文章中,他用C和C实现了一个函数

C版

string compose(const string& name,const string& domain){  return name+'@'+domain;}

C版

char* compose(const char* name,const char* domain){  char* res = malloc(strlen(name)+strlen(domain)+2); // space for strings,'@',and 0  char* p = strcpy(res,name);p += strlen(name);  *p = '@';  strcpy(p+1,domain);  return res;}

最后他提到:

which version is likely to be the most efficIEnt? Yes,the C++ version,because it does not have to count the argument characters and does not use the free store (dynamic memory) for short argument strings.

这是正确的吗?虽然C版本比C版本短,但我认为std :: string的operator()类似于C版本.

解决方法 至少在某些情况下,是的,C版本将大大加快.

特别是,std :: string的一些实现包括通常被称为“短字符串优化”(又名“SSO”)的内容.这样,std :: string对象本身就包含一个字符串的空间,该字符串达到某个特定限制(通常约为20个字符).适合该缓冲区的字符串可以(并且将)避免在堆/空闲存储上分配空间来存储其数据.

从理论上讲,你可以做大致相同的事情C – 但是如果你这样做,你必须定义自己的结构来保存你的字符串(就像C一样),并且 *** 作这些字符串结构的每一段代码都需要知道它们是如何工作的,并以同样的方式 *** 纵它们. C可以很容易地将代码包装到运算符重载中,以隐藏细节.

最重要的是,C理论上可以跟上,但是要做到这一点就足够了,实际上需要在C中进行这种 *** 作的程序几乎总是比用C语言编写的对应程序更快.不同的是它们运行的​​速度有多快 – 有时候它们只会快一点,但特别是在对相对较小的字符串进行大量 *** 作的情况下,相当大的差异(例如,2:1或更多)非常常见.当你需要 *** 作非常大的字符串时,差异也可能非常大,其中C通过能够在恒定时间内找到大小来获得很多,其中strlen需要线性时间.对于小到足以完全适合L1缓存的字符串,这并不意味着什么,但如果您可以从L1读取一个值而从主存储器读取整个字符串,则差异可能很大.

总结

以上是内存溢出为你收集整理的C vs C性能(用于处理短字符串)全部内容,希望文章能够帮你解决C vs C性能(用于处理短字符串)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存