gpt4 book ai didi

c++ - 为什么 istream/ostream 慢

转载 作者:IT老高 更新时间:2023-10-28 12:35:51 25 4
gpt4 key购买 nike

http://channel9.msdn.com/Events/GoingNative/2013/Writing-Quick-Code-in-Cpp-Quickly 的 50:40| Andrei Alexandrescu 开玩笑说 istream 效率低/慢。

过去我遇到过一个问题,即 ostream 很慢而 fwrite 明显更快(运行一次主循环时减少了很多秒),但我不明白为什么也没有研究过。

是什么让 C++ 中的 istream 和 ostream 变慢?或者至少与同样满足需求的其他东西(如 fread/fget、fwrite)相比速度较慢。

最佳答案

实际上,IOStreams 不必很慢!但是,以合理的方式实现它们以使它们快速运行是一个问题。大多数标准 C++ 库似乎都不太重视实现 IOStreams。很久以前当我的CXXRT仍然保持它与 stdio 一样快 - 如果使用得当!

请注意,使用 IOStreams 布局的用户几乎没有性能陷阱。以下指南适用于所有 IOStream 实现,尤其适用于那些为快速而量身定制的实现:

  1. 使用std::cinstd::cout等时需要调用std::sync_with_stdio(false)!如果没有这个调用,任何使用标准流对象都需要与 C 的标准流同步。当然,当使用 std::sync_with_stdio(false) 时,假设你没有将 std::cinstdin 混用,std::coutstdout
  2. Do not use std::endl因为它要求对任何缓冲区进行许多不必要的刷新。同样,不要设置 std::ios_base::unitbuf 或不必要地使用 std::flush
  3. 在创建您自己的流缓冲区时(好吧,很少有用户这样做),请确保他们确实使用了内部缓冲区!处理单个字符会跳过多个条件和一个 virtual 函数,这使得它非常慢。

关于c++ - 为什么 istream/ostream 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18688763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com