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 []完成的.关闭优化后,通常会将其作为一个真正的函数调用生成,这会增加很多开销,就像订阅数组一样简单.当您启用优化时,它会内联生成,从而消除了这种开销.
在调试模式下,实现std::vector提供了大量的运行时检查以便于使用.此检查不适用于本机阵列.例如,在VC2008中,如果vector在调试模式下编译示例,range-checking 即使是在这种情况下也是如此operator[].