C++ clang数组比clang向量和gcc向量和数组快得多

Jam*_*ens 3 arrays performance gcc clang c++11

下面的代码显示了我的测试用例.我用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;
Run Code Online (Sandbox Code Playgroud)
std::vector<long long> vec(100000000, 0);
for (long long i = 0; i < 100000000; ++i)
    vec[i] = i;
Run Code Online (Sandbox Code Playgroud)

对于我来说,我只进行了初始化测试,然后是初始化和for循环.结果如下:

GCC:

  • 仅限阵列初始化:0.182秒
  • 数组初始化和for循环:0.250s
  • 仅矢量初始化:0.169s
  • 向量初始化和for循环:0.252

铛:

  • 仅限阵列初始化:0.004s
  • 数组初始化和for循环:0.004s
  • 仅矢量初始化:0.150
  • 矢量初始化和for循环:0.240s

gcc结果与传统认为向量与数组一样快.而且,矢量的clang和gcc结果非常一致.然而,铿锵声的结果是荒谬的,阵列表现得相当快.任何人都知道为什么会这样?

usr*_*usr 7

25倍的加速会告诉您代码已经过优化.由于您的代码不会显示任何内容,因此可以删除它.您的基准无效.