std::vector 明顯比原生陣列慢嗎?
你可能聽說過 std::vector 本質上是實作為一個數組,這意味著它們的性能應該具有可比性。但是,您最近的測試表明情況並非如此, std::vector 表現出顯著的效能損失。本文旨在澄清 std::vector 是否確實比原生數組慢很多。
效能分析
提供的測試程式碼測量了初始化一個大數組所需的時間。使用三種不同方法的 Pixel 物件陣列:帶有 resize() 的 std::vector、帶有 push_back() 的 std::vector 以及用 malloc() 分配的普通數組。結果表明,帶有 resize() 的 std::vector 比普通數組慢大約 4 倍,而帶有 push_back() 的 std::vector 甚至更慢。
但是,經過仔細檢查,情況變得很明顯性能差異源於測試程式碼對向量進行兩次迭代這一事實。第一次迭代初始化對象,第二次迭代只是讀取它們。這樣做是為了方便與只能初始化一次的普通數組進行公平比較。
修訂測試
準確比較std::vector 的效能對於原生數組,測試程式碼被修改為僅初始化向量一次:
std::vector<Pixel> pixels(dimensions * dimensions, Pixel(255, 0, 0));
透過此修改,之間的效能差距std::vector和普通數組變得可以忽略不計:
g++ -O3 Time.cpp -I <MyBoost> ./a.out UseVector completed in 2.216 seconds
結論
根據修改後的測試結果,std::vector 的性能與與本機數組相同。在初始測試中觀察到的明顯緩慢是由於 std::vector 使用的初始化方法效率低下造成的。正確初始化後,與本機數組相比,std::vector 表現出最小的效能開銷。
應該注意的是,所提供的測試結果特定於 Pixel 類別和所採用的特定初始化模式。對於其他類別和初始化場景,效能可能會有所不同。
以上是`std::vector` 真的比原生數組慢嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!