我用C++编写了很长时间.我总是想知道哪个执行速度更快printf或者cout?
情况:我正在用C++设计一个应用程序,我有一些约束,比如执行时间限制.我的应用程序在控制台上加载打印命令.那么哪一个更好printf或者cout?
Hex*_*gon 25
每个都有自己的开销.根据您打印的内容,可能更快.
以下是我想到的两点 -
printf()必须解析"format"字符串并对其进行操作,这会增加成本.
cout具有更复杂的继承层次结构并传递对象.
在实践中,差异对于除了最奇怪的情况之外的所有情况都不重要.如果您认为真的很重要 - 请测量!
编辑 -
哦,哎呀,我不相信我这样做,但是为了记录,在我非常具体的测试用例中,使用我非常具体的机器及其非常具体的负载,使用MSVC在Release中编译 -
打印150,000"Hello,World!"(不使用endl)需要大约 -
90ms的printf(),79ms的cout.
打印150,000随机双打大约需要
3450ms(printf()),3420ms(cout).
(平均超过10次运行).
差异很小,这可能意味着什么......
Nol*_*rin 24
你真的需要关心哪个具有更快的执行速度?它们仅用于将文本打印到控制台/标准输出,这通常不是要求超高效率的任务.就此而言,我无论如何都无法想象速度会有很大的差异(尽管人们可能期望printf稍快一点,因为它缺乏面向对象的微小复杂性).然而,鉴于我们在这里处理I/O操作,即使是微小的差异也可能会被I/O开销所淹没.当然,如果你比较了写入文件的等效方法,那就是这种情况.
printf只是将文本输出到C中
的标准输出的标准方法.'cout'管道只是在C++中将文本输出到标准输出的标准方法.
说到这一切,comp.lang.cc小组讨论了同样的问题.然而,共识确实应该是出于性能以外的原因而选择一个而不是另一个.
C++ cout缓慢的原因是与stdio的默认同步.
尝试执行以下操作以停用此问题.
ios_base::sync_with_stdio(false)
http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/
http://msdn.microsoft.com/es-es/library/7yxhba01.aspx
至少在Windows上,写入控制台是一个巨大的瓶颈,因此"嘈杂"的控制台模式程序将比静音程序慢得多.因此,在该平台上,用于解决控制台的库函数的细微差别可能在实践中没有显着差异.
在其他平台上可能会有所不同.此外,它取决于您正在做多少控制台输出,相对于其他有用的工作.
最后,它取决于您的平台的C和C++ I/O库的实现.
所以这个问题没有一般的答案.
绩效是一个无需比较的问题; 无法想到实际上重要的任何事情(开发控制台程序).但是,您应该考虑以下几点:
Iostream使用操作符链接而不是va_args.这意味着您的程序不会崩溃,因为您传递了错误数量的参数.printf可能会发生这种情况.
Iostream使用运算符重载而不是va_args - 这意味着您的程序不会崩溃,因为您传递了一个int并且它期待一个字符串.printf可能会发生这种情况.
Iostreams没有对格式字符串的本机支持(这是#1和#2的主要根本原因).这通常是件好事,但有时候它们很有用.Boost格式库为Iostreams带来了这个功能,适用于那些需要定义行为(抛出异常)而不是未定义行为的人(就像printf一样).目前这不符合标准.
与其printf等效项不同,Iostream可以直接处理可变长度的缓冲区,而不是被迫处理硬编码.
去寻找cout.
| 归档时间: |
|
| 查看次数: |
22592 次 |
| 最近记录: |