在玩 VS11 beta 时,我注意到一些奇怪的东西:这段代码
f 花费了 0 毫秒
int main()
{
std::vector<int> v;
size_t length =64*1024*1024;
for (int i = 0; i < length; i++)
{
v.push_back(rand());
}
uint64_t sum=0;
auto t1 = std::chrono::system_clock::now();
for (size_t i=0;i<v.size();++i)
sum+=v[i];
//std::cout << sum << std::endl;
auto t2 = std::chrono::system_clock::now();
std::cout << "f() took "
<< std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count()
<< " milliseconds\n";
}
但是,当我决定取消注释该行并计算总和时,它会打印出一个合理的数字。
这是启用优化后我得到的行为,禁用它们后我得到“正常” cout
f() 耗时 471 毫秒
那么这个标准符合行为吗?重要提示:死代码并没有被优化掉,我可以看到从控制台运行时的延迟,我可以在任务管理器中看到 CPU 峰值。