नए auto
कीवर्ड का उपयोग करके मेरे कोड निष्पादन समय को कम कर दिया गया है। मैं निम्नलिखित सरल कोड स्निपेट के लिए समस्या संकुचित:विजुअल स्टूडियो 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;
}
उत्पादन मैं अपने i7/Win7 मशीन (रिलीज़ मोड; VS2010) पर मिलता है:
100000 x func1: 0.001 sec.
100000 x func2: 3.484 sec.
किसी को भी व्याख्या कर सकते हैं क्यों का उपयोग कर auto
परिणाम इस तरह के एक अलग निष्पादन समय में?
जाहिर है, एक सरल कामकाज है, यानी auto
पूरी तरह से उपयोग करना बंद करें, लेकिन मुझे उम्मीद है कि इस मुद्दे को दूर करने का एक बेहतर तरीका है।
अरे, तुम सच में उन सवालों के जवाब देने में तेजी से होना चाहिए। ;-) – Andre
मैंने सोचा (लेकिन मुझे लगता है कि मैं गलत था) कि ऑटो फ़ंक्शन के रिटर्न प्रकार का उपयोग करता है। ऑपरेटर का रिटर्न प्रकार [] संदर्भ है तो हमें अतिरिक्त '&' जोड़ने की आवश्यकता क्यों है? – MDman
@MDman: 'auto' शीर्ष-स्तर सीवी और संदर्भ को हटा देता है, यह प्रयुक्त प्रकार" decays "करता है। – Xeo