首頁 > 後端開發 > Python教學 > 為什麼從標準輸入讀取行時,C 的 cin 明顯慢於 Python 的 input() ,以及如何提高效能?

為什麼從標準輸入讀取行時,C 的 cin 明顯慢於 Python 的 input() ,以及如何提高效能?

Patricia Arquette
發布: 2024-11-23 06:34:10
原創
717 人瀏覽過

Why is C  's `cin` Significantly Slower Than Python's `input()` for Reading Lines from Standard Input, and How Can Performance Be Improved?

為什麼在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板