我想知道这两个提示行中的哪一个在性能方面更好:
./function input > output.txt
./function input output.txt
现在,在某些上下文中,我的函数仅使用fprintf
来打印输出,例如:
fprintf(output," whatever");
那么,上面提到的哪一种替代方案在性能方面会表现得更好?重定向stdout或直接在文件中打印?
答案 0 :(得分:0)
两种方法之间的区别仅在于哪个进程打开文件进行写入并关闭它。因此在运行程序时没有性能差异。五个(stdin,stdout,stderr,“input”和“output.txt”)文件描述符打开而不是只有四个(将输出写入stdout时)没有任何区别。
当然,无论是写入stdout还是文件,程序都会以完全相同的方式运行,它必须写入文件也是行缓冲的(在写入stdout时默认情况下也是这样)。
如果你没有在setvbuf()
这样的文件结构上调用fopen()
setvbuf(stream, (char *) NULL, _IOLBF, 0);
(从setvbuf()
的联机帮助页中获取),你的程序将使用块缓冲,在大多数情况下,这将比重定向到stdout更快。
因此,如果允许您的程序对其输出使用块缓冲,则./function input output.txt
将更快。 (但是关于你的问题的评论是有效的:衡量真实的表现!)