write()或printf()更好吗?

时间:2012-12-25 08:11:11

标签: c optimization

printf更好,因为......

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

写得更好因为......

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

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

还有什么想法?

1 个答案:

答案 0 :(得分:1)

实际上取决于操作系统。在Linux和许多Unix上,write(2)是低级syscall,因此执行某些输出的是基本的,最低级别的操作。 (printfwrite以上构建的库函数。

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