為什麼迭代std::vector 比迭代std::array 更快
在先前的基準測試中,假設迭代通過std: :array 比通過std::vector 迭代要快。然而,基準測試的後續修訂表明 std::vector 實際上是更快的選擇。本文探討了這項意外發現背後的原因。
基準改進
改進的基準解決了原始實現中的以下缺陷:
基準測試結果
產生的基準計時表明,與先前的假設相反:
分析
分析 分析<code class="cpp">std::fill_n(v.data(), n, 1);</code>
分析
分析
分析分析相反,std::vector 會分配記憶體頁面並將其零填充建立。這確保了當循環迭代向量時,頁面已經存在於記憶體中。 為了說明這個概念,在主函數的開頭添加了一行程式碼,以將 std 的記憶體頁面新增至記憶體。 ::array 進入位址空間:透過預先對頁面進行故障處理,std::array 的執行時間會減少到與 std::vector 相符。 結論迭代 std::array 和 std::vector 之間的效能差異源自於記憶體管理機制。對 std::array 頁面進行預先故障處理或在支援 mlock 的作業系統上執行程式可以提高 std::array 的效能以符合 std::vector 的效能。以上是為什麼在我的基準測試中迭代 std::vector 比迭代 std::array 更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!