gpt4 book ai didi

c++ - 在 printf 之后使用 fflush 会减慢你的程序吗?

转载 作者:太空狗 更新时间:2023-10-29 23:30:02 27 4
gpt4 key购买 nike

我正在编写一些控制台程序,我注意到有时当我使用 print() 并且我的程序处于空闲状态时,并没有打印出所有内容(最后几行丢失)。

最终会发生一些事情,确实会打印出这些行,但通常当我关闭程序时,最后几行并不存在。

所以我做了一些挖掘,看起来标准输出缓冲区并不总是清空,除非满足某些条件(换行?/换行?)。

所以我创建了一个“myprintf()”函数,它包装了 printf 以执行以下操作(在伪代码中):

printf(...);
fflush(stdout);

问题是,除了明显的额外函数调用开销之外,这是否会使我的程序变慢? IE。这是性能方面的不良做法吗?

最佳答案

取决于几件事。

如果您的 printf 以换行符 (\n) 结尾,stdout 缓冲区将立即刷新并直接显示所有内容。这是 stdout 缓冲区的默认行为。所以在那种情况下,再次刷新确实会使你的程序变慢一点,尽管只是一点点。

现在,如果您不以换行符结尾,stdout 将不会自动刷新,您确实需要 fflush 才能正确显示内容。然后它也会减慢程序速度,尽管只是一点点。

不过,您可以通过将缓冲区标准输出设置为在刷新前不等待换行来完全避免您的问题。这会使你的包装器变得多余像这样:

setbuf(stdout, NULL);

将保证每次 stdout 中有任何内容时都会被刷新。与每次直接调用 fflush() 相比,这会稍微高效一些。

总而言之,除非您在非常严格的性能约束下运行,否则产生的开销可以忽略不计。

关于c++ - 在 printf 之后使用 fflush 会减慢你的程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33775622/

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