為什麼從stdin 讀取行在C 中比Python 慢得多
在比較Python 和C 中的輸入讀取速度時,觀察到C 程式碼的執行速度慢了一個數量級。
cin 缺乏緩衝
這種差異是由默認行為的根本差異引起的。 C 中的 cin 預設與標準輸入/輸出 (stdio) 同步,導致它放棄輸入緩衝,導致一次讀取一個字符,這對於系統調用而言是一個昂貴的過程。
解決方案:停用同步
為了提高效能,可以透過在開頭新增以下行來停用cin 與stdio 的同步程式:
std::ios_base::sync_with_stdio(false);
這允許C 流獨立緩衝I/O,顯著提高讀取速度。
Straw poll 來說明差異:
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 (unfair comparison) | 54,644,808 |
此表顯示了 cin 同步停用時讀取速度的巨大差異。
以上是為什麼 C 的 cin 比 Python 的輸入慢很多,如何改進?的詳細內容。更多資訊請關注PHP中文網其他相關文章!