次のように、ブーストベクターと標準ベクターについて興味深いテストを行いました
int N = 10000;
{
boost::timer::auto_cpu_timer t;
std::vector<int> v;
for (int i = 0; i < N; ++i)
{
v.insert(v.begin(), i);
}
}
{
boost::timer::auto_cpu_timer t;
boost::container::vector<int> v;
for (int i = 0; i < N; ++i)
{
v.insert(v.begin(), i);
}
}
win32 リリース、vc2010 でコンパイル、/O2 /Oy-
N = 10000 の場合
標準ベクトルの場合: 0.140849 秒の壁、0.140401 秒のユーザー + 0.000000 秒のシステム = 0.140401 秒の CPU (99.7%)
f ブースト ベクトル: 0.056174 秒の壁、0.062400 秒のユーザー + 0.000000 秒のシステム = 0.062400 秒の CPU (111.1%)
N = 100,000 の場合
標準: 14.050757 秒の壁、14.055690 秒のユーザー + 0.000000 秒のシステム = 14.055690 秒の CPU (100.0%)
ブースト: 5.585048 秒の壁、5.584836 秒のユーザー + 0.000000 秒のシステム = 5.584836 秒の CPU (100.0%)
両方に reserve(N) を追加すると、CPU 時間はほとんど変わりません。
それらの間に違いはありますか?Boost は std よりもはるかに高速ですが、なぜですか? ありがとう。
sizeof()、std::vector 16、boost::container::vector 12 を確認します。