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