以下代码展示了我的测试用例。我使用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循环的测试。结果如下:
GCC:
- 仅数组初始化:0.182秒
- 数组初始化和for循环:0.250秒
- 仅向量初始化:0.169秒
- 向量初始化和for循环:0.252秒
Clang:
- 仅数组初始化:0.004秒
- 数组初始化和for循环:0.004秒
- 仅向量初始化:0.150秒
- 向量初始化和for循环:0.240秒
gcc的结果符合向量与数组一样快的普遍观点。此外,clang和gcc在向量方面的结果基本一致。然而,clang的结果非常荒谬,数组表现出明显更快的速度。有人知道为什么吗?