首頁 > 後端開發 > C++ > 為什麼 C 的 cin 從 stdin 讀取行明顯慢於 Python?

為什麼 C 的 cin 從 stdin 讀取行明顯慢於 Python?

DDD
發布: 2024-12-29 11:53:10
原創
763 人瀏覽過

Why is C  's `cin` Significantly Slower Than Python for Reading Lines from stdin?

為什麼 C 語言中從 stdin 讀取行比 Python 慢很多?

背景:

使用 C 從 stdin 讀取字串輸入行可能比 Python 等效項慢得多。出現這種差異的原因是 C 中的預設設定需要更多系統呼叫。

輸入流的預設行為:

預設情況下,C 輸入流 cin 與標準 C I/O 函式庫 (stdio)。這種同步確保輸入不會被緩衝並且一次讀取一個字元。雖然此行為可以防止 cin 流和 stdio 函數之間的衝突,但也會導致效能損失。

系統調用的使用:

當 cin 與 stdio 同步時,每個讀取的字元都會觸發系統調用,這是一個代價高昂的操作。這一開銷會顯著減慢輸入過程,尤其是在讀取大量資料時。

解:

要提高 C 中行讀取的效能,可以停用cin 和 stdio 之間的同步。這可以透過呼叫sync_with_stdio(false)方法來實現。

或者,使用 fgets 函數而不是 getline 也可以繞過同步開銷。

效能比較:

這是原始(同步)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 (not a fair comparison) 54,644,808

結論:

停用cin 與stdio 之間的同步或使用fgets可顯著提高 C 中行讀取的效能,使其與Python 的效率。

以上是為什麼 C 的 cin 從 stdin 讀取行明顯慢於 Python?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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