【发布时间】:2012-08-25 10:06:44
【问题描述】:
我正在查看新的 chrono 库 (C++11) 并尝试使用它。我写了以下两个程序:
vector.cpp
#include <iostream>
#include <vector>
#include <chrono>
int main()
{
std::vector<double> vector(1000000, 0.);
auto start = std::chrono::high_resolution_clock::now();
for(int i(0); i < vector.size(); i++)
{
vector[i] += 1.;
}
auto end = std::chrono::high_resolution_clock::now();
std::cout << "Elapsed time: " << std::chrono::duration_cast<std::chrono::milliseconds>(end-start).count() << " milliseconds" << std::endl;
return 0;
}
array.cpp
#include <iostream>
#include <array>
#include <algorithm>
#include <chrono>
int main()
{
std::array<double, 1000000> array;
std::fill(array.begin(), array.end(), 0.);
auto start = std::chrono::high_resolution_clock::now();
for(int i(0); i < array.size(); i++)
{
array[i] += 1.;
}
auto end = std::chrono::high_resolution_clock::now();
std::cout << "Elapsed time: " << std::chrono::duration_cast<std::chrono::milliseconds>(end-start).count() << " milliseconds" << std::endl;
return 0;
}
我为数组程序获得了 9 毫秒,为向量程序获得了 12 毫秒。 std::vector 似乎比 std::array 慢 33%。我做得对吗?为什么会有这种差异?
Ps:我使用的是 GCC 4.7,Mac OS X 10.7。
g++-mp-4.7 -std=c++11 vector.cpp -o vector
g++-mp-4.7 -std=c++11 array.cpp -o array
【问题讨论】:
-
更改为
for(int i(0), iMax( vector.size() ); i < iMax; i++)。 -
您是否运行了足够多的时间以确保您的时间在统计上是准确的? - 1 次运行 3 毫秒的差异可能没有意义。
-
@R.M.,以确保您不会在每次迭代中做任何额外的工作 - 您应该为两个版本都做。
-
顺便说一句,您不需要
std::fill将数组归零,您可以像这样初始化它std::array<double, 1000000> array{}。 -
你也应该打开优化,否则这个练习完全是学术性的。
标签: c++ performance c++11 chrono