當比較使用 C 和 Python 從標準輸入讀取行的效能時,您可能會發現令人驚訝的是,C 程式碼的運行速度往往比 Python 程式碼慢得多。這可以歸因於兩種語言預設輸入/輸出 (I/O) 設定的根本差異。
預設情況下,C 輸入流cin 與標準 I/O (stdio) 系統同步。這意味著 cin 避免任何輸入緩衝並根據需要逐字讀取資料。雖然這種方法可以防止將 C I/O 流與 stdio 函數混合時出現潛在問題,但它會帶來效能損失,尤其是在讀取大量資料時。
相較之下,Python預設使用緩衝輸入。當從 Python 中的標準輸入讀取時,解釋器會以更大的區塊讀取輸入,從而減少所需的系統呼叫數量。緩衝透過最小化與系統呼叫相關的開銷來提高效能,並且可以顯著加快輸入處理速度。
要實現與C 中的Python 類似的效能,您可以明確停用同步透過使用ios_base::sync_with_stdio(false) 方法在cin 和stdio 之間進行切換。這允許 cin 獨立緩衝輸入,從而提高效能。
不要使用 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中文網其他相關文章!