2012-12-25 36 views
-3

printf的更好,因爲...write()或printf()更好嗎?

  • ,它緩存輸出
  • 它字符串格式化

寫是因爲更好的...

  • 它不必計算字符串長度
  • 調試起來更容易,因爲它不會緩衝
  • printf的僅僅是寫入
  • 它不使用任何存儲器的輸出緩衝器
  • 由於上述原因的包裝,有可能創造一個更優化(更高的具有較小的內存佔用速度)程序與通過傳遞字符串長度(通常已知並且不需要重新計算)並在內部管理緩衝區(僅佔用實際需要的內存,而不是程序員無法影響的一些數量),而不是用printf寫入。
  • 有可能是在printf的一些開銷(),即使它與非格式化字符串只叫

總之,我認爲的printf()是首選的各種調試 - 中輸出用於人類消費(由於字符串格式化),而在正常操作中write()用於輸出數據時首選。

還有什麼想法?

+0

這是一個相當廣泛的問題,更有見解的答案。 – sean

+0

'寫()'不緩衝?在'stdout'上?你是認真的? – 2012-12-25 08:16:29

+1

另外,哪一個更好? 'curl_easy_init()'或'archive_create()'? – 2012-12-25 08:17:10

回答

1

它實際上取決於操作系統。在Linux和許多Unix上,write(2)是一個低級別的syscall,因此是執行某些輸出的最基本的最低級別操作。 (並且printf是在write上構建的庫函數)。

然而,write(2)操作確實有開銷,並且性能方面的原因要緩衝自己的輸出,這<stdio.h>標準功能(如printf)做的非常好。簡而言之,避免用少量數據調用write(2)(好的緩衝區大小通常是幾千字節)。庫函數fflush正在刷新緩衝區(因此可能會調用write)。