关于几种简单情况的计算速度的疑惑

capriccio   (小草|长相守)2020-06-29 19:00:20
就是下面代码在4种情况下的计算速度:(编译器vs2015,x64)
1. a,b都是double*, debug模式: 0.0024秒
2. a,b都是double*, release模式:0.0035秒
3. a,b都是vector<double>,debug模式: 0.46 秒
4. a,b都是vector<double>,release模式:0.0009秒。
我觉得奇怪的是:4为什么比2快;1为什么比2快。(速度是多次测试取的平均,每次测试的速度都差不多)
有哪位能解释一下?
int main()
{
int N = 1000000;
vector<double> a(N);
vector<double> b(N);
//double* a = new double[N];
//double* b = new double[N];
LARGE_INTEGER cf, cs, ce;
QueryPerformanceFrequency(&cf);
for (int i = 0; i < N; ++i)
{
a[i] = i;
}
QueryPerformanceCounter(&cs);
for (int i = 0; i < N; ++i)
{
b[i] = a[i] * a[i];
}
QueryPerformanceCounter(&ce);
printf("%g, %g, %g
", b[0], b[int(N / 2)], b[N-1]);
printf("%g
", (ce.QuadPart - cs.QuadPart) / double(cf.QuadPart));
}

水木社区