sprintf,lexical_cast,format 三者效率比较
2007-07-30 00:44
148 查看
sprintf,lexical_cast,format 三者效率比较
作者: 江淼Blog: http://blog.csdn.net/jiangfriend
时间: 2007-7-30 00:42
sprintf至C语言流传至今,经久不衰,虽然microsoft好心提供sprintf_s,并发出C4996的警告,我个人是比较不接这个领子。 sprintf安全问题一直被大家质疑,但我觉的出现了安全的问题是设计上的缺陷,正如线程死锁也是设计上的缺陷,一个需要杀死线程的程序绝对不是一个合 格的程序。
lexical_cast是boost的成员之一,因为文件比较短,源码走马观花的看过一遍,内部使用的是stream,不过lexical_cast仅仅是个转换,其出现用于代替atoi,这里顺便带过。
format是boost提供的用于格式化的库,我才疏学浅也没时间分析源码,只知道使用方法。有兴趣的可以看看,一定会有不少收获,发出C++原来还能这样用的感叹。
测试
下面对该3各具特色的函数进行效率上的测试。测试环境:赛扬D2.66G 内存512M,测试状态为日常应用状态(即运行了一些程序)VC8.0
测试程序很简单,简单的循环
for(int i=0;i<1000000;i++)
{
command;
}
各执行100万次后得出下表
command | Release(ns) | Debug(ns) | ||
sprintf(buf,"%d",3); | 289769 | 451770 | ||
lexical_cast<string>(3) | 1165520 | 402.22% | 21802420 | 4826.00% |
format("%1%")%3; | 14006000 | 4833.51% | 133649200 | 29583.46% |
sprintf(buf,"%d %s",3,"Hello"); | 527948 | 828527 | ||
format("%1% %2%")%3%"Hello"; | 18745300 | 3550.60% | 178153800 | 21502.47% |
意料之中,sprintf因其没啥"负担"效率手当其冲,功能最复杂的boost.format居于最后。lexical_cast虽然花了400%的时间,相对值虽然大,但绝对值还是可以接受的。
总结
在效率第一的情况下如内核,核心算法,反朴归真是最佳的选择,用c命令代替c++命令等等。lexical_cast可以用在一般的应用,但如前文所说仅仅单个的格式转换。
format的速度约为15ns/条,比起sprintf着实笨拙,但在高速的计算机面前,一般应用也是绝对可以接受的,虽然多花了三四十倍的时间,但因其具备完全替代sprintf的功能且有过之而无不及,也有一立足之地。
相关链接
http://www.boost.org/相关文章推荐
- highcharts 大数据 String+,StringBuilder,String.format运行效率比较
- boost-使用format和lexical_cast实现数字和字符串之间的转换
- c++拼接字符串效率比较(+=、append、stringstream、sprintf)
- 字符串处理函数strcpy和sprintf的效率比较
- 去除 boost::format lexical_cast 输出的整数中的千分位符
- c++拼接字符串效率比较(+=、append、stringstream、sprintf)
- c++拼接字符串效率比较(+=、append、stringstream、sprintf)
- 字符串处理函数strcpy和sprintf的效率比较
- 【SQL】IN、EXISTS和表连接三者的效率比较
- c++拼接字符串效率比较(+=、append、stringstream、sprintf)
- 【转载,实用】c++拼接字符串效率比较(+=、append、stringstream、sprintf)
- c++拼接字符串效率比较(+=、append、stringstream、sprintf)
- Redis查询&JDBC查询&Hibernate查询方式的效率比较...
- 转:比较JavaScript中的集合及其检索效率
- 4.6.2 万能转换器boost::lexical_cast
- 抛砖引玉:MySQL数据库中,在Spring+Hibernate条件下,比较like和=查询日期的效率
- boost::lexical_cast常见用法详解之万能转换
- list与vector的尾部插入删除效率比较
- sprintf和string_format在PHP中的应用,主要用于smarty
- 各种查找算法效率比较