यह code example इच्छा उत्पादन time: 0
N
का मूल्य की परवाह किए बिना जब विजुअल स्टूडियो प्रोफेशनल 2013 रिलीज मोड में अद्यतन 3, दोनों 32 और 64-बिट विकल्प के साथ संकलित:क्या आप इस दृश्य सी ++ बग को सीटाइम के साथ पुन: पेश या समझा सकते हैं?
#include <iostream>
#include <functional>
#include <ctime>
using namespace std;
void bar(int i, int& x, int& y) {x = i%13; y = i%23;}
int g(int N = 1E9) {
int x, y;
int r = 0;
for (int i = 1; i <= N; ++i) {
bar(i, x, y);
r += x+y;
}
return r;
}
int main()
{
auto t0 = clock();
auto r = g();
auto t1 = clock();
cout << r << " time: " << t1-t0 << endl;
return 0;
}
जब जीसीसी, बजना और दूसरे संस्करण के साथ परीक्षण किया rextester.com पर vC++ का, यह सही से व्यवहार करता है और शून्य से अधिक time
आउटपुट करता है। कोई संकेत क्या है यहाँ क्या चल रहा है?
मैंने देखा है कि g()
समारोह को इनलाइन सही व्यवहार पुनर्स्थापित करता है, लेकिन बदलते t0
, r
और t1
की घोषणा और प्रारंभ आदेश नहीं करता है।
ऑपरेशन करने का समय घड़ी घड़ी() को कॉल करते समय टाइमर का उपयोग कर रहा है। मैंने हाल ही में एक उत्तर लिखा है जो आपको विंडोज पर उच्च रिज़ॉल्यूशन टाइमर का उपयोग करने का विचार दे सकता है: http://stackoverflow.com/questions/25954602/ctimespan-always-gets-zero –
एन = 2147483646 आज़माएं और देखें कि क्या यह बनाता है अंतर। –
@MichaelPetch _ ऑपरेशन करने के लिए समय टाइमर_ के संकल्प के नीचे है - यह मामला नहीं है, मैंने बड़ी 'N' की कोशिश की, जहां' f() 'निष्पादित करने में कई सेकंड लगते हैं। –