c++ - C++中将stdin的内容读入字符串或 vector 的最快方法

标签 c++ string file-io vector

许多 stackoverflow 答案都涉及如何从磁盘中读取文件,您可以根据文件大小预先分配内存。

但是在 stdin 中吞咽的最快方法是什么(例如,当一个大文件通过管道传输到您的程序中时)?

如果那是最快的解决方案,我很乐意转换成 vector (以后总是可以将其转换为 std::string)。

最佳答案

将未格式化数据读入内存的最快方法是使用未格式化读取例程。例如,fstream::read()。没有什么能击败它。

小心!有些人声称通过使用操作系统级别的例程(例如 read()),您会看到性能提升。如果您尝试这样做,您将获得巨大的性能下降。

编辑。对上述声明的一些解释。降级的原因是内核调用。每次读取都是一次内核调用,因此除非您准确读取最佳数据缓冲区的大小,否则将导致对内核的更多调用或不太理想的读取。虽然您可以通过实验找出最佳读取大小,但 C 运行时已经为您完成了这项工作。 fread() 和无格式流读取已经优化,因此无论您的读取 block 有多大,都可以保证以最佳方式调用内核。

关于c++ - C++中将stdin的内容读入字符串或 vector 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954492/

相关文章:

c++ - 如何在C++中将字符串转换为json格式?

c++ - 客户端通过Http代理服务器连接服务器(Windows c\c++)

c++ - 将 cout 重定向到使用 winapi 创建的新缓冲区

c++ - 使用 OpenCV 计算协方差矩阵

C++如何向后打印字符串?

javascript - 如何在浏览器中读取本地文本文件?

c++ - 关于如何处理在另一个文件中定义的符号的困惑

java - 仅 Grep 字符串中某些模式后的几个数字

c - 经常使用文件定位功能来翻转文件

C#:将文本文件内容与字符串变量进行比较