首頁 >後端開發 >C++ >為什麼 C 標準輸入讀取速度比 Python 慢,如何改進?

為什麼 C 標準輸入讀取速度比 Python 慢,如何改進?

Barbara Streisand
Barbara Streisand原創
2024-12-26 16:29:09383瀏覽

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

為什麼C 標準輸入讀取效率低於Python

比較Python 和C 從標準讀取字串輸入行的效能輸入( stdin)時,出現了顯著的差異:C 代碼的運行速度顯著變慢。這促使我們調查造成這種性能差距的根本原因。

問題源自於 C 的預設設定。預設情況下,istream(例如 cin)與 stdio 同步,以避免輸入緩衝。為了最佳化效能,可以使用 std::ios_base::sync_with_stdio(false) 語句來停用此同步。此調整緩解了主要的效能限制。

標準輸入流在 Python 和 C 之間的設計上運作方式不同。 Python 通常是有緩衝的,而 C 的預設是無緩衝的。一般情況下,緩衝減少了系統調用,提高了效率。然而,C 中基於 FILE* 的 stdio 和 iostream 的單獨實作和緩衝區在一起使用時會帶來潛在問題。

為了避免緩衝區不一致和意外結果,C 預設將流與 stdio 同步。雖然這可以防止潛在的問題,但它會帶來開銷,特別是在處理大量輸入時。

為了實現最大效能,程式設計師可以使用sync_with_stdio方法來停用同步。此最佳化允許 C 標準流獨立緩衝,在某些場景下顯著提高速度。

效能基準

為了更全面的比較,這裡有各種方法的效能基準:

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 54,644,808 (Not a fair comparison)

顯然,停用同步並使用fget 會顯著提高C 語言的效能.

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn