VS11 ベータ版で遊んでいるときに、何かおかしいことに気付きました: このコードは失敗します
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 スパイクが見られます。