/dev/urandom
可以wc
在 1 分钟内通过管道传输1 GB (并且wc
15% 的时间正在运行,等待其余数据)!你试一试time (head -1000000000c /dev/urandom|wc)
但最快的方法是使用read(2)系统调用和一个相当大的缓冲区(例如 64Kbytes 到 256Kbytes)。
当然,请阅读Advanced Linux Programming并仔细阅读syscalls(2)相关man
页面。
研究Linux 内核、GNU libc和musl-libc的源代码以获取灵感。它们都是开源项目,因此请随时为它们做出贡献并改进它们。
但我敢打赌,在实践中使用popen
、 或stdin
或读取std::cin
不会增加太多开销。
您还可以使用setvbuf(3)增加stdio缓冲区。
另请参阅此问题。
(如果你从stdin读取文件描述符STDIN_FILENO
是 0)
您可能对time(7)、vdso(7)、syscalls(2)感兴趣
查看MILEPOST GCC和Ctuning项目。考虑加入RefPerSys之一。阅读课程理解机器学习:从理论到算法ISBN 978-1-107-05713-5