Good good study, day day up

aleung的学习笔记, aleung的idea

C++中生成格式化字符串方法的性能比较

在C++中进行格式化字符串的生成,通常有两种方法。一种是C风格的,使用sprintf生成格式化字符串,用str系列字符串函数进行字符串(实际是内存buffer)的拼接、拷贝等操作。另外一种是C++风格的,用string stream类通过流操作来生成格式化的字符串。

在使用上,两种方法各有长短,在这里不作分析。我发现的问题是string stream的效率相对C的方法效率比较低。

编写了两个程序做对比测试,都是模拟写日志文件的操作,往文件里面写入特定数量的文字信息,每行包括了字符串、整数,分别使用两种方法生成同样的内容。为了避免代码其余部分造成的影响,使用rational quantify采集运行的时间信息,只比较生成格式化字符串部分的代码运行所占用的时间。做了多次测试,结果都表明,C++风格方法的耗时是C风格方法的3倍。

结论是string stream的效率相对sprintf要低,实现同样的功能耗时大概是3倍左右。其实STL慢是很正常的,毕竟复杂很多,只是没想到慢这么多。其实大多数应用中,这也不算什么问题,毕竟现在的处理器能力这么强,只有在对性能要求极端严格的场合才需要把这因素考虑进去。