原始結論誤解
最初,一個有缺陷的基準測試建議std::array 迭代比std::vector 迭代更快。然而,在修正基準測試後,發現 std::vector 明顯更快。
基準實現
為了確保準確性,基準測試採用了多項改進:
結果和解釋
基準測試結果顯示std::vector 迭代大約在30 毫秒內完成,而std::array 迭代大約需要99 毫秒。
差異源自於記憶體頁面行為。在基準測試中,std::array 位於可執行檔的 .bss 部分(初始化為零),因此其記憶體頁未載入至進程位址空間。相反,std::vector 已被指派並填零,導致頁面存在。
解決方案
將std::array 的頁面預置為零-在Linux 上填充或使用mlock() 將其頁面帶入地址空間,使其迭代速度與std::vector 的迭代速度相同。
以上是為什麼 std::vector 迭代比 std::array 迭代更快,儘管最初的基準測試表明並非如此?的詳細內容。更多資訊請關注PHP中文網其他相關文章!