透過std::array 和std::vector 迭代之間的效能差異
我之前的基準測試,旨在評估以下迭代的性能std::array 和std::vector 包含一些缺陷。然而,在重新審視這個問題時,我發現 std::vector 實際上比 std::array 更快。
為了減輕最佳化的潛力,我採用了幾種措施,包括:
兩種資料結構的執行時間如下:
std:: array:
$ g++ arrVsVec.cpp -O3 $ ./a.out result: 0 time: 99.554109
std::vector:
$ g++ arrVsVec.cpp -O3 $ ./a.out result: 0 time: 30.734491
差異原因:
性能差異源自於std::array 的記憶體頁面未駐留在進程位址中空間。具體來說,全域範圍 std::array 駐留在可執行檔的 .bss 部分中,該部分尚未被分頁並初始化為零。另一方面,std::vector 已被分配並初始化為零,導致其記憶體頁面已存在於位址空間中。
解決問題:
為了消除此問題並證明兩種資料結構之間的奇偶性,可以添加以下程式碼作為main 的第一行以引入頁面:
<code class="cpp">std::fill_n(v.data(), n, 1); // included in <algorithm></code>
或者,在Linux 系統上,一個可以使用mlock(v.data(), v.size() * sizeof(v[0]));強制頁面進入位址空間。請參閱 man mlock 手冊頁以了解更多詳細資訊。
以上是為什麼 std::vector 在迭代中比 std::array 更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!