簡體   English   中英

C++ 打印到終端會顯着減慢代碼速度嗎?

[英]C++ does printing to terminal significantly slow down code?

我有一個代碼,我目前在其中向終端打印了很多診斷消息。 有人知道這會減慢我的代碼速度嗎? 通過將輸出管道傳輸到文件,我會得到很大的速度提升,例如,而不是運行:

./my_program

我跑

./my_program > output.log

另外,通過用 ofstream 替換 cout 並直接寫入文件,我會進一步提高速度嗎?

編輯:假設我正在寫入 /dev/shm,磁盤訪問速度並不是真正的問題。

是的,渲染到屏幕比寫入文件需要更長的時間。
在 Windows 中它甚至更慢,因為程序渲染不是正在運行的程序,所以進程之間不斷發送消息來獲取它。
我猜它在 linux 中是一樣的,因為虛擬終端與正在運行的進程位於不同的進程上。

當然可以。 打印到終端涉及渲染和其他事情(非平凡的),並且通常緩沖少得多。 操作系統和流實現可以通過文件 I/O 進行更多的緩沖和緩存。

您獲得多少速度取決於幾個因素。 例如,Windows 控制台的速度是出了名的慢。 ofstream可能cout快一點,這取決於你的 libc++ 實現(不同的緩沖區大小、線程同步……)

如果不測量特定系統,這很難說,但我懷疑寫入文件實際上比寫入顯示器更快(文件不必滾動等)。

根據您的操作系統、系統和庫,如果與cout相比使用不同的緩沖方案,直接寫入ofstream可以進一步提高性能,但它可能沒有任何影響。 確定知道的唯一方法是分析您的代碼(如評論中已經建議的那樣)。

這真的取決於你打印了多少。

如果您的程序每秒打印 50 行或更多行,那么我敢打賭輸出開始變得重要。

輸出到文件肯定比打印到終端快得多,盡管不同的終端程序在速度上會有很大差異,這取決於它們正在執行多少渲染以及它們用於渲染 api 的內容。

我非常懷疑 cout 與 ofstream 在終端打印甚至輸出到文件的性能方面是否存在顯着的性能差異。 如果您使用 fwrite 編寫日志行,可能會有非常小的性能提升。 最終像 cout 這樣的東西會調用 fwrite,所以你可以通過自己調用到最低級別來獲得小的改進。

最后 - 像 cout 這樣的輸出流比像 cerr 這樣的錯誤流更快。 Cout 會比 cerr 做更多的緩沖,性能會明顯更快。 但看起來您已經在使用 cout 了。

一般來說,是的。 如果您不必寫入終端,則可以使用文件。 如果不需要查看輸出,也可以使用 /dev/null。(例如,測量實際速度...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM