मैंने विजुअल सी ++ 2008 पर इस कोड को आजमाया और यह दिखाता है कि ए और बी के पास एक ही पता नहीं है।सी ++ स्टैक और स्कोप
int main()
{
{
int A;
printf("%p\n", &A);
}
int B;
printf("%p\n", &B);
}
बढ़ी बल्कि अब मौजूद नहीं है जब बी परिभाषित हो जाता है, यह मेरे कि एक ही ढेर स्थान पुन: उपयोग किया जा सकता है लगता है ...
मुझे समझ नहीं आता क्यों संकलक नहीं है ऐसा लगता है कि एक बहुत ही सरल अनुकूलन की तरह दिखता है (जो उदाहरण के लिए बड़े चर और पुनरावर्ती कार्यों के संदर्भ में महत्वपूर्ण हो सकता है)। और ऐसा लगता है कि यह सीपीयू और न ही स्मृति पर भारी होगा। क्या किसी के पास इसके लिए स्पष्टीकरण है?
मुझे लगता है कि उत्तर "यह दिखने से कहीं अधिक जटिल है" के आधार पर है, लेकिन ईमानदारी से मुझे कोई जानकारी नहीं है।
संपादित करें: नीचे दिए गए उत्तरों और टिप्पणियों के बारे में कुछ सटीक।
इस कोड के साथ समस्या यह है कि प्रत्येक बार जब यह फ़ंक्शन कहा जाता है, तो स्टैक "एक पूर्णांक बहुत अधिक" बढ़ता है। बेशक यह उदाहरण में कोई समस्या नहीं है, लेकिन बड़े चर और रिकर्सिव कॉल पर विचार करें और आपके पास एक स्टैक ओवरफ़्लो है जिसे आसानी से टाला जा सकता है।
जो मैं सुझाव देता हूं वह एक स्मृति अनुकूलन है, लेकिन मुझे नहीं लगता कि यह प्रदर्शन को कैसे नुकसान पहुंचाएगा।
और वैसे, यह रिलीज बनाता है, सभी अनुकूलन पर होगा।
आप एक रिलीज निर्माण या एक डीबग बिल्ड संकलन कर रहे हैं? – Michael
जो आप सुझाव दे रहे हैं वह ** ** ** ** अनुकूलन है, लेकिन आवश्यक रूप से गति अनुकूलन नहीं है। –
यदि सभी स्थानीय लोग कैश लाइन पर फिट होने के लिए बहुत बड़े हैं, तो यह एक गति अनुकूलन बन जाता है क्योंकि आपके पास कैश मिस नहीं है। – Michael