L'utilizzo della nuova parola chiave auto
ha ridotto i tempi di esecuzione del codice. Ho ristretto il problema al seguente frammento di codice semplice:Penalità delle prestazioni utilizzando la parola chiave 'auto' in Visual Studio 2010
#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;
}
L'uscita ricevo sul mio i7/macchina Win7 (modalità di rilascio; VS2010) è:
100000 x func1: 0.001 sec.
100000 x func2: 3.484 sec.
Qualcuno può spiegare perché utilizzando auto
risultati in tempi di esecuzione così diversi?
Ovviamente, vi è una soluzione semplice, vale a dire, smettere di utilizzare auto
del tutto, ma spero che ci sia un modo migliore per superare questo problema.
Accidenti, devi essere molto veloce a rispondere a queste domande. ;-) – Andre
Ho pensato (ma suppongo di essermi sbagliato) che auto usi il tipo di ritorno della funzione. Il tipo di operatore di ritorno [] è di riferimento, quindi perché è necessario aggiungere l'extra "&"? – MDman
@MDman: 'auto' rimuove il cv e il riferimento di livello superiore," decompone "il tipo dedotto. – Xeo