Visual Studio 2010 で 'auto' キーワードを使用するとパフォーマンスが低下する 質問する

Visual Studio 2010 で 'auto' キーワードを使用するとパフォーマンスが低下する 質問する

新しいautoキーワードを使用すると、コードの実行時間が低下します。問題を次の単純なコード スニペットに絞り込みました。

#include <iostream>
#include <map>
#include <vector>
#include <deque>
#include <time.h>

using namespace std;

void func1(map<int, vector<deque<float>>>& m)
{
    vector<deque<float>>& v = m[1];
}

void func2(map<int, vector<deque<float>>>& m)
{
    auto v = m[1];
}

void main () {

    map<int, vector<deque<float>>> m;
    m[1].push_back(deque<float>(1000,1));

    clock_t begin=clock();
    for(int i = 0; i < 100000; ++i) func1(m);
    cout << "100000 x func1: " << (((double)(clock() - begin))/CLOCKS_PER_SEC) << " sec." << endl;

    begin=clock();
    for(int i = 0; i < 100000; ++i) func2(m);
    cout << "100000 x func2: " << (((double)(clock() - begin))/CLOCKS_PER_SEC) << " sec." << endl;

}

私の i7 / Win7 マシン (リリース モード、VS2010) で得られる出力は次のとおりです。

100000 x func1: 0.001 sec.
100000 x func2: 3.484 sec.

autoを使用すると実行時間がこのように異なる理由を説明できる人はいますか?

明らかに、使用を完全に停止するという簡単な回避策がありますautoが、この問題を克服するより良い方法があることを願っています。

ベストアンサー1

ベクトルを にコピーしていますv

代わりにこれを試して参照を作成してください

auto& v = ...

おすすめ記事