【发布时间】:2012-12-25 16:14:02
【问题描述】:
printf 更好,因为 ...
- 它缓冲输出
- 它进行字符串格式化
写得更好,因为...
- 不必计算字符串长度
- 它不缓冲,调试起来容易得多
- printf 只是 write 的包装器
- 它不使用任何内存作为输出缓冲区
- 由于上述原因,与使用 printf 相比,通过传递字符串长度(通常已知且无需重新计算)和在内部管理一个缓冲区(它只占用实际需要的内存,而不是一些不受程序员影响的内存)。
- 即使只使用非格式化字符串调用 printf(),也可能存在一些开销
总而言之,我认为 printf() 更适合用于人类消费的各种调试输出(因为字符串格式),而 write() 更适合在正常操作中输出数据。
还有什么想法吗?
【问题讨论】:
-
这是一个相当宽泛的问题,答案比较固执。
-
write()不缓冲?在stdout?你是认真的吗? -
另外,哪个更好?
curl_easy_init()或archive_create()? -
write(2)系统调用没有缓冲,内核可能有一些文件系统缓存(但这些“缓冲区”保留在内核中,而不是在应用程序中) -
不,内核中的文件系统缓存与文件系统和整个文件机制相关联。每个单独的文件在文件系统缓存中没有特定的缓冲区,但可能以块的形式存在。
标签: c optimization