许多 stackoverflow 答案都涉及如何从磁盘中读取文件,您可以根据文件大小预先分配内存。
- What is the best way to read an entire file into a std::string in C++?
- Fastest way possible to read contents of a file
但是在 stdin 中吞咽的最快方法是什么(例如,当一个大文件通过管道传输到您的程序中时)?
如果那是最快的解决方案,我很乐意转换成 vector (以后总是可以将其转换为 std::string)。
最佳答案
将未格式化数据读入内存的最快方法是使用未格式化读取例程。例如,fstream::read()。没有什么能击败它。
小心!有些人声称通过使用操作系统级别的例程(例如 read()),您会看到性能提升。如果您尝试这样做,您将获得巨大的性能下降。
编辑。对上述声明的一些解释。降级的原因是内核调用。每次读取都是一次内核调用,因此除非您准确读取最佳数据缓冲区的大小,否则将导致对内核的更多调用或不太理想的读取。虽然您可以通过实验找出最佳读取大小,但 C 运行时已经为您完成了这项工作。 fread() 和无格式流读取已经优化,因此无论您的读取 block 有多大,都可以保证以最佳方式调用内核。
关于c++ - C++中将stdin的内容读入字符串或 vector 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954492/