矢量初始化比数组慢...为什么?

Ais*_*war 8 c++ optimization performance vector

我尝试了两件事:(下面的伪代码)

int arr[10000];
for (int i = 0; i < 10000; i++)
{
   for (int j = 0; j < 10000; j++)
   {
       arr[j] = j;
   }
}
Run Code Online (Sandbox Code Playgroud)

vector<int> arr(10000);
for (int i = 0; i < 10000; i++)
{
   for (int j = 0; j < 10000; j++)
   {
       arr[j] = j;
   }
}
Run Code Online (Sandbox Code Playgroud)

我运行了两个程序并使用"time"shell命令对其进行了计时.程序1在5秒内运行,程序2在30秒内运行.我打开了编译器优化的两个程序,两个程序大约在同一时间运行(0.38s).我对这些结果感到困惑.有人可以向我解释为什么会这样吗?

谢谢!

Jer*_*fin 16

对于模板,下标是使用operator []完成的.关闭优化后,通常会将其作为一个真正的函数调用生成,这会增加很多开销,就像订阅数组一样简单.当您启用优化时,它会内联生成,从而消除了这种开销.


Ara*_*raK 8

在调试模式下,实现std::vector提供了大量的运行时检查以便于使用.此检查不适用于本机阵列.例如,在VC2008中,如果vector在调试模式下编译示例,range-checking 即使是在这种情况下也是如此operator[].


Dan*_*ard 5

如果您的非优化矢量实现正在执行边界检查,那么这将解决差异.