命運逆轉:迭代std::vector 優於std::array
與最初的假設相反,最近的基準測試顯示迭代std::vector 比迭代std::array 快得多。這與先前關於數組提供卓越迭代性能的信念相矛盾。
為了確保準確性,基準測試採用了多項改進:
std::array 和std::vector 的測量時間如下如下:
std::array: 99.554109 milliseconds std::vector: 30.734491 milliseconds
探究原因
std:: vector 令人驚訝的速度優勢可以歸因於記憶體分頁。此陣列儲存在全域範圍內,最初駐留在執行檔的 .bss 部分中,並且不會被分頁到進程位址空間中。相比之下,std::vector 在建立期間被分配並填零,導致其記憶體頁面存在於記憶體中。
解決問題
至為了公平競爭,人們可以在迭代之前明確初始化數組或將其頁面放入內存。這裡有一個修改,使數組迭代時間與 std::vector:
<code class="cpp">std::fill_n(v.data(), n, 1);</code>
或者,mlock() 函數可用於在 Linux 系統上強制將數組頁放入記憶體。
這項調整顯示 std::array 和 std::vector 之間的效能差異主要源自於它們的記憶體管理策略,凸顯了記憶體存取模式對程式效能的重要性。
以上是為什麼迭代“std::vector”比“std::array”更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!