1

我有一个 c++ 应用程序,其中包含大量std::cout. 它在 linux 2.6.x 上运行。我需要测试应用程序的性能,所以我正在考虑重定向std::cout/dev/null. 在 C 中,我可以简单地使用dup2. c++ 中是否有等效的重定向std::ostream到文件或/dev/null

4

3 回答 3

6

这个dup2技巧在 C++ 中仍然有效,因为就像<stdio.h>,<iostream>只是 UNIX 系统调用之上的一个缓冲层。

您也可以在 C++ 级别通过从以下位置断开缓冲区来执行此操作std::cout

std::cout.rdbuf( NULL );

std::cout除了切断与任何实际输出设备之间的关系外,这将设置std::ios::badbit标志,以防止发生任何输出转换(例如数字到文本)。性能应该比文件系统级别的破解要好得多。

于 2013-02-13T03:19:01.740 回答
3

你可以在 C++ 中做同样的事情。C 和 C++ 都依赖底层操作系统进行 IO,重定向 fd 1 会std::cout像影响stdout.

(当然,为了测试,您可以> /dev/null在命令行上运行命令...)

于 2013-02-13T02:30:12.863 回答
0

另一种方法是将您的文件符号链接到 /dev/null

% ln -s /dev/null core
% ls -l core
lrwx-xr-x  1 john users 9 Nov 18 12:26 core -> /dev/null

但是,要真正测试您的程序速度,我建议您注释掉对文件的写入并计算执行时间差,因为写入 /dev/null 的开销可能与写入普通文件的开销不同。

于 2013-02-13T03:05:47.913 回答