為什麼在 C 中從 stdin 讀取行比 Python 慢得多?
問題:
當比較從 stdin 讀取字串輸入的 Python 和 C 程式碼時,Python 程式碼的執行速度明顯更快。儘管確保正確的 C 實現,Python 等效項的性能仍優於它一個數量級。
預設設定和系統呼叫:
在 Python 中,預設啟用輸入緩衝,從而實現高效的大塊讀取和更少的系統呼叫。相比之下,C 流與 stdio 同步,迫使 cin 跳過輸入緩衝並單獨讀取字元。此選擇旨在防止與 stdio 函數發生衝突,但無意中引入了顯著的開銷。
效能最佳化:
要提高 C 效能,請包含語句 cin.sync_with_stdio(false ) 在 main 的開頭。這會停用串流同步並允許獨立緩衝,從而大大提高輸入讀取速度。
替代選項:
cin 的另一個高效能替代方案是 fgets,它採用 stdio 函數用於直接輸入讀取。
比較結果:
Implementation | Lines per Second |
---|---|
Python (default) | 3,571,428 |
cin (default/naive) | 819,672 |
cin (no sync) | 12,500,000 |
fgets | 14,285,714 |
wc (not fair comparison) | 54,644,808 |
以上是為什麼從標準輸入讀取行時,C 的 cin 明顯慢於 Python 的 input() ,以及如何提高效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!