【发布时间】:2015-05-13 17:46:08
【问题描述】:
下面的代码显示了我的测试用例。我用 clang++ --std=c++11 -O2 和 g++ --std=c++11 -O2 编译。
long long *ary = new long long[100000000]();
for (long long i = 0; i < 100000000; ++i)
ary[i] = i;
std::vector<long long> vec(100000000, 0);
for (long long i = 0; i < 100000000; ++i)
vec[i] = i;
对于这两种情况,我只对初始化进行了测试,然后是初始化和 for 循环。结果如下:
海合会:
- 仅数组初始化:0.182s
- 数组初始化和for循环:0.250s
- 仅矢量初始化:0.169s
- 向量初始化和for循环:0.252
叮当声:
- 仅数组初始化:0.004s
- 数组初始化和for循环:0.004s
- 仅矢量初始化:0.150
- 向量初始化和for循环:0.240s
gcc 结果与向量与数组一样快的普遍信念相吻合。此外,vector 的 clang 和 gcc 结果非常一致。然而,clang 结果是荒谬的,阵列的执行速度要快得多。有人知道这是为什么吗?
【问题讨论】:
-
Clang 无法实际执行该代码。由于没有任何可观察到的效果,主要怀疑它正在被优化。
标签: arrays performance c++11 gcc clang