首頁 > 後端開發 > C++ > 主體

為什麼在我的基準測試中迭代 std::vector 比迭代 std::array 更快?

Patricia Arquette
發布: 2024-11-02 03:19:02
原創
182 人瀏覽過

Why is iterating through std::vector faster than std::array in my benchmark?

為什麼迭代std::vector 比迭代std::array 更快

在先前的基準測試中,假設迭代通過std: :array 比通過std::vector 迭代要快。然而,基準測試的後續修訂表明 std::vector 實際上是更快的選擇。本文探討了這項意外發現背後的原因。

基準改進

改進的基準解決了原始實現中的以下缺陷:

  • 確保循環的結果用於防止優化遺漏。
  • 利用 -O3 標誌來增強速度。
  • 使用 std::chrono 將測量僅隔離到 for 迴圈。

基準測試結果

產生的基準計時表明,與先前的假設相反:

  • std::array:執行時間= 99.554109 毫秒
  • std::vector: 執行時間= 30.734491 毫秒

分析

分析

分析
<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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!