两个调用 cout 的效率是否低于一个
Are two calls to cout less efficient than one?
>我有两个问题:
-
对 std::cout 的两次调用是否比一次效率低?
-
如果是,编译器(通常)是否对其进行优化并为下面显示的三种情况生成相等的程序集?
例如:
std::cout << "a" << "b";
或
std::cout << "ab";
或
std::cout << "a";
std::cout << "b";
我问,因为我认为最后一个对于要输出的较长文本列表来说是最具可读性的。
在这个例子中,
std::cout << "ab";
更有效率(我还没有看到编译器"合并"输出,但我必须说我也没有寻找它 - 如果我发现有趣的东西,我会去查看和编辑)。
编辑:Clang(截至上周末的3.7版本)在以下情况下不会合并字符串:
std::cout << "a" << "b";
其他两个代码片段是相同的,除了行数和源代码大小[通常对可执行文件没有影响,所以"无关紧要"]。
如注释中所述,如果您实际上有两个字符串,例如变量,则构造新字符串的开销几乎肯定不值得麻烦,并且除了限制应用程序执行的整体 I/O 带宽之外,std::cout
的性能对应用程序的整体性能至关重要。换句话说,当将某些内容写入控制台需要几毫秒时,试图节省几微秒是没有意义的。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- 我创建了一个库,想知道设计是否效率低下
- 将大型对象存储在无序映射中是否效率低下
- std::map::find 的效率是否与值的数据大小有关?
- 我是否需要遍历升压 rtree 的层次结构才能实现最大效率?
- 编译器中的布尔值为 8 位.对它们的操作是否效率低下
- 变量名称的长度是否会造成任何与性能或效率相关的问题
- 迭代器和const_iterator之间的比较是否效率低下
- 两个调用 cout 的效率是否低于一个
- 循环中的复制效率是否低于 memcpy()
- 首先创建字符串,然后通过移动语义将其添加到 vector 或在 vector 中创建元素是否具有内存效率
- (*i).member的效率是否低于i->member的效率
- 使用小数据类型是否会减少内存使用(来自内存分配而不是效率)