為什麼 C 行讀取速度比 Python 慢,如何最佳化?

Mary-Kate Olsen
發布: 2024-11-23 19:14:12
原創
407 人瀏覽過

Why is C   Line Reading Slower Than Python, and How Can It Be Optimized?

C 和 Python 中行讀取的效能比較:為什麼 C 較慢?

當比較使用 C 和 Python 從標準輸入讀取行的效能時,您可能會發現令人驚訝的是,C 程式碼的運行速度往往比 Python 程式碼慢得多。這可以歸因於兩種語言預設輸入/輸出 (I/O) 設定的根本差異。

瞭解 C 的輸入/輸出特性

預設情況下,C 輸入流cin 與標準 I/O (stdio) 系統同步。這意味著 cin 避免任何輸入緩衝並根據需要逐字讀取資料。雖然這種方法可以防止將 C I/O 流與 stdio 函數混合時出現潛在問題,但它會帶來效能損失,尤其是在讀取大量資料時。

Python 的預設輸入緩衝

相較之下,Python預設使用緩衝輸入。當從 Python 中的標準輸入讀取時,解釋器會以更大的區塊讀取輸入,從而減少所需的系統呼叫數量。緩衝透過最小化與系統呼叫相關的開銷來提高效能,並且可以顯著加快輸入處理速度。

停用C 流同步

要實現與C 中的Python 類似的效能,您可以明確停用同步透過使用ios_base::sync_with_stdio(false) 方法在cin 和stdio 之間進行切換。這允許 cin 獨立緩衝輸入,從而提高效能。

其他最佳化:使用 fgets

不要使用 getline(cin, input_line),而是考慮使用 fgets(input_line, sizeof(input_line) ,標準輸入)直接。 fgets 是一個 C 函數,它從流中讀取一行輸入並將其儲存在字元陣列中。透過避免 cin 流,您可以進一步減少開銷並可能提高效能。

比較結果

提供的表格總結了C 和Python 中不同方法的行讀取速度:

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 實現的執行速度明顯慢於Python。但是,透過停用串流同步或直接使用 fgets,您可以在 C 中獲得相當或更好的效能。

以上是為什麼 C 行讀取速度比 Python 慢,如何最佳化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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