再加一个对比,
vector<double> aa(N);
vector<double> bb(N);
double* a = aa.data();
double* b = bb.data();
debug下和1速度相同,release下和4相同,而不是和2相同
【 在 capriccio (小草|长相守) 的大作中提到: 】
: 标 题: 关于几种简单情况的计算速度的疑惑
: 发信站: 水木社区 (Mon Jun 29 19:00:20 2020), 站内
:
: 就是下面代码在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\n", b[0], b[int(N / 2)], b[N-1]);
: printf("%g\n", (ce.QuadPart - cs.QuadPart) / double(cf.QuadPart));
: }
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 115.171.203.*]
--
FROM 115.171.203.*