gpt4 book ai didi

c++ - std::cout 关闭时的开销(STDIN_FILENO)

转载 作者:行者123 更新时间:2023-11-30 04:02:28 34 4
gpt4 key购买 nike

我有后台进程(unix 系统上的守护进程)有 std::cout 用于在某些地方对源文件进行调试。我在静音模式或无静音模式下运行此守护进程。在进程开始后的静默模式,我执行了这段代码:

std::cout.rdbuf(0);
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

如您所知,std::cout 仍然存在于代码中并运行。

NON silence mode上开销很大,而cout到屏幕的开销很大,而且IO操作很慢。

问题:静默模式的代码开销是多少?由于存在 std::cout 但关闭了 STDOUT_FILENO,我的程序是否存在一些“拖累”? (有时它会尝试打印最多 1 kb 的信息)

这个开销有多大?

最佳答案

它显然有一些开销。但并不多;每个<<中的第一件事是为了测试流状态是否良好。如果相应的物理设备已关闭,则不应该。至少,它会在第一次刷新后变坏(由于缓冲区变满)。或者,您可以调用 std::cout.rdbuf( nullptr ) ,这应该会使它立即变坏。

传统的解决方案是创建一个无操作流缓冲区。这样做的好处是流不会变坏:读取总是看到文件结尾,输出总是有效。它的缺点是因为流状态良好,您实际上格式化了所有输出:std::cout << someDouble将完成将 double 转换为字符序列的所有工作。如果流状态不好(因为它将 nullptr 作为流缓冲区),<<运算符在尝试转换任何内容之前返回。

关于c++ - std::cout 关闭时的开销(STDIN_FILENO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055826/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com