VS11 बीटा के साथ खेलने के दौरान मैं कुछ अजीब देखा: इस कोड COUTSstd :: chrono :: system_clock :: अब() पर कॉल पर कंपाइलर रीडर कोड कर सकते हैं?
च ले लिया 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";
}
लेकिन जब मैं तो यह योग की couting के साथ लाइन uncomment करने का फैसला एक उचित संख्या प्रिंट करता है।
यह व्यवहार मैं अनुकूलन के साथ मिलता है उन्हें विकलांग के साथ सक्षम किया गया है, मैं अदालत
च() 471 मिलीसेकेंड
तो यह मानक अनुरूप व्यवहार है ले लिया "सामान्य" मिल सकता है? महत्वपूर्ण: ऐसा नहीं है कि मृत कोड अनुकूलित हो जाता है, मैं कंसोल से चलते समय अंतराल देख सकता हूं, और मैं कार्य प्रबंधक में सीपीयू स्पाइक देख सकता हूं।
चेक किया गया, आप सही हैं, लेकिन अब मैं उलझन में हूं, अगर यह समझने में बुद्धिमान है कि योग का उपयोग नहीं किया गया है तो यह प्रारंभिक क्यों कर रहा है? मुझे लगता है कि यह साबित नहीं कर सकता कि रैंड() का कोई साइड इफेक्ट नहीं है ... – NoSenseEtAl
आउच ... केसी यह साबित नहीं कर सकता कि रैंड का कोई दुष्प्रभाव नहीं है-रैंड एक शुद्ध कार्य नहीं है ... इसमें राज्य है। :) लेकिन यहां तक कि रैंड() को भी बदलना है, मैं अभी भी प्रारंभिकरण को रोकता नहीं है ... – NoSenseEtAl
@NoSenseEtAl: ठीक है प्रारंभिक 'push_back' का उपयोग करके काम करता है ... तो मेरा अनुमान है कि संकलक यह कहने में सक्षम हो सकता है कि v 'बाद में इसका इस्तेमाल केवल उन तरीकों से किया जा सकता है, जो इसे छोड़ सकते हैं, यह मानकर खुशी नहीं है कि' push_back() 'का कोई अन्य दुष्प्रभाव नहीं होगा। हालांकि मैं निश्चित रूप से कहना नहीं चाहूंगा। –