2009-11-08 124 views
2

我在写一组单元测试,将计算出的值写入文件。每个测试产生一个矩阵矩阵,可容纳50,000到500,000个双打,我总共有128个测试用例组合。C++ ofstream与C++ cout传输到文件

是否有参与编写的cout语句,然后是输出管道,以文件的任何显著的开销,或者我会过得更好直接写入使用ofstream的文件?

回答

8

这将取决于您的系统和环境。这可能几乎没什么区别,但只有一种方法可以肯定:尝试两种方法并衡量它们。

1

由于所涉及的尺寸是如此之大,我假设这些文件并不意味着由人类阅读?只要确保将它们写成二进制文件而不是人类可读的文本,因为这会比使用ofstream或管道cout之间的差异差得多。

是否意味着你使用ofstream或不我不知道。我从来没有写二进制来清点,所以我不能说这是否是可能的...

+0

嗯,另一个答案,另一个匿名downvote。如果我不知道更好,我会说有人怀恨在心地跟着我...... – Troubadour 2009-11-08 17:32:21

0

正如查尔斯·贝利说,它的实现依赖;接下来的主要是用gnu工具链实现linux,但我很难想象它在其他操作系统中有很大的不同。

在的libstdC++ 4.4.2:

  • 的fstream的包含底层stdio_filebuf其是basic_filebuf。这个basic_filebuf通过继承basic_streambuf来包含它自己的缓冲区,并且实际上包含一个__basic_file,它本身包含一个底层的普通C stdio抽象(FILE *或者std :: __ c_file *),在其中刷新缓冲区。

  • COUT,它是一个ostream与本身与C文件抽象标准输出初始化的stdio_sync_filebuf初始化。 stdio_sync_filebuf调用纯C的stdio函数。

仅考虑C++,它出现的一个fstream的可以更有效由于缓冲器的两个层。

仅考虑C,如果进程使用在文件中重定向的stdout文件描述符分叉,则应该在写入新打开的文件(fstream结束时执行的操作)或自fd点开始的stdout之间没有区别到一个文件无论如何(最后cout做什么)。

如果我是你,我会因为这是你的意图使用fstream的。