-3

printf 更好,因为...

  • 它缓冲输出
  • 它进行字符串格式化

写得更好,因为...

  • 它不必计算字符串长度
  • 调试起来容易得多,因为它不缓冲
  • printf 只是 write 的包装器
  • 它不使用任何内存作为输出缓冲区
  • 由于上述原因,通过传递字符串长度(通常已知且无需重新计算)并管理缓冲区,可以使用 write 创建比使用 printf 更优化(速度更快,内存占用更少)的程序内部(它只占用实际需要的内存,而不是一些不受程序员影响的内存)。
  • 即使仅使用非格式化字符串调用 printf() 也可能存在一些开销

总而言之,我认为 printf() 更适合用于人类消费的各种调试输出(因为字符串格式),而 write() 更适合在正常操作中输出数据。

还有什么想法吗?

4

1 回答 1

1

它实际上取决于操作系统。在 Linux 和许多 Unix 上,write(2)是一个低级别的系统调用,因此是基本的、最低级别的操作来执行一些输出。(并且printf是上面构建的库函数write)。

但是,write(2)操作确实有开销,并且出于性能原因,您希望缓冲输出,<stdio.h>标准函数(如printf)做得很好。简单来说,避免调用write(2)少量数据(一个好的缓冲区大小通常是几千字节)。库fflush函数正在刷新缓冲区(因此可以调用write)。

于 2012-12-25T08:14:02.043 回答