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