首頁 > 後端開發 > C++ > 為什麼 C 的 stdin 輸入明顯慢於 Python,如何改進?

為什麼 C 的 stdin 輸入明顯慢於 Python,如何改進?

Susan Sarandon
發布: 2024-12-18 11:57:16
原創
869 人瀏覽過

Why is C  's stdin Input Significantly Slower Than Python's, and How Can It Be Improved?

為什麼在 C 中從 stdin 讀取行比 Python 慢得多?

在 C 中從標準輸入 (stdin) 讀取行可能會慢得多C 與 Python 相比,由於 C 輸入流中的預設設定不同。

預設緩衝

預設情況下,C 輸入流 (cin) 與標準輸入/輸出 (stdio) 串流同步。這種同步會強制 cin 避免任何輸入緩衝,從而導致一次讀取一個字元。

Python 緩衝

相較之下,stdin 流Python 中預設是緩衝的,這使得它可以一次讀取更大的輸入區塊。這減少了讀取資料所需的系統呼叫數量,從而提高了效能。

修復C 程式碼

要在C 中實現類似的效能,您可以停用透過在主函數的開頭添加以下行來與stdio 同步:

std::ios_base::sync_with_stdio(false);
登入後複製

這允許cin緩衝其輸入並顯著改進

fgets 與getline

此外,您可以考慮使用fgets 代替getline(),這是一個讀取一行文字的C 函數來自文件或標準輸入。 fgets 的優點是不需要動態分配內存,進一步提高了效能。

效能比較

下表是不同方法的每秒行數(LPS)比較使用100M 行檔案:

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

如您所見,禁用同步或顯著使用fgets提高了C 的效能。

以上是為什麼 C 的 stdin 輸入明顯慢於 Python,如何改進?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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