क्या कोई और कुछ संरचना बनाई गई और कहीं भी शुरूआत हुई?
इस बारे में सोचें कि संरचना कैसे वापस आती है। यदि x
और y
दोनों 32 बिट हैं, तो 32-बिट आर्किटेक्चर पर एक रजिस्टर में फिट होना बहुत बड़ा है, और यह 64-बिट आर्किटेक्चर पर 64-बिट मानों पर लागू होता है (@ डेंटन जेनेट्री के उत्तर में उल्लेख किया गया है कि कितने सरल मान हैं लौटा), तो इसे कहीं आवंटित किया जाना है। इसके लिए ढेर का उपयोग करना अपर्याप्त होगा, इसलिए इसे ढेर पर आवंटित किया जाना है। लेकिन यह आपके getSomeStruct
फ़ंक्शन के ढेर फ्रेम पर नहीं हो सकता है, क्योंकि यह फ़ंक्शन रिटर्न के बाद अब मान्य नहीं है।
इसके बजाय कंपाइलर कॉलर कहलाता है कि कॉलर कहलाता है (जिसे कॉलर के ढेर पर शायद कहीं भी कहा जाता है), बुलाए गए फ़ंक्शन को आवंटित स्थान पर एक छिपे हुए पॉइंटर को पास करके। तो, जिस स्थान पर इसे शून्य पर सेट किया जा रहा है वह कॉलर पर है, न कि आपके getSomeStruct
फ़ंक्शन पर।
"नामित मूल्य रिटर्न ऑप्टिमाइज़ेशन" जैसी अनुकूलन भी हैं जहां अतिरिक्त प्रतियों को बढ़ाया जा सकता है।तो, क्या आपने लापता return
का उपयोग किया था, परिणाम अस्थायी बनाने और इसकी प्रतिलिपि बनाने के बजाय, कॉलर द्वारा आवंटित स्थान पर सीधे बनाया जाएगा।
क्या हो रहा है इसके बारे में और जानने के लिए, आपको कॉलर फ़ंक्शन को देखना होगा। क्या यह एक "खाली" SomeStruct
प्रारंभ करने (शून्य करने के लिए) है जिसके बाद आप बाद में अपने getSomeStruct
फ़ंक्शन का रिटर्न मान असाइन करते हैं? या यह कुछ और कर रहा है?
ऐसा लगता है कि यह इसकी अनुमति नहीं देता है क्योंकि आपके पास आपके कंपाइलर को त्रुटियों के रूप में चेतावनी देने के लिए सेट अप किया गया है। क्या आपको लगता है कि यह मेरे मामले में चेतावनी स्तर सेट बहुत कम हो सकता है? –