मैं जाने के लिए नया हूं और मुझे सी-स्टाइल स्टैक-आधारित प्रोग्रामिंग के बीच थोड़ा सा असंगत विसंगति का सामना करना पड़ रहा है जहां स्वचालित चर ढेर पर रहते हैं और आवंटित स्मृति ढेर और पायथन शैली के ढेर-आधारित प्रोग्रामिंग पर रहता है जहां ढेर पर रहने वाली एकमात्र चीज ढेर पर वस्तुओं के संदर्भ/पॉइंटर्स हैं।गो में गोले के ढेर बनाम ढेर, और वे कैसे कचरा संग्रह से संबंधित हैं
func myFunction() (*MyStructType, error) {
var chunk *MyStructType = new(HeaderChunk)
...
return chunk, nil
}
func myFunction() (*MyStructType, error) {
var chunk MyStructType
...
return &chunk, nil
}
अर्थात एक नया struct आवंटित और इसे वापस:
जहां तक मेरा बता सकते हैं, दो निम्नलिखित कार्य एक ही आउटपुट दे।
अगर मैं इसे सी में लिखा होता, तो पहले व्यक्ति ने ढेर पर एक वस्तु डाली होगी और दूसरा इसे ढेर पर रखेगा। पहला ढेर में एक सूचक वापस लौटाएगा, दूसरा स्टैक पर एक सूचक लौटाएगा, जो समारोह वापस लौटाए जाने तक वाष्पित हो जाता था, जो एक बुरी चीज होगी।
अगर मैं इसे पायथन (या सी # को छोड़कर कई अन्य आधुनिक भाषाओं) में लिखा था तो उदाहरण 2 संभव नहीं होता।
मुझे लगता है कि गो कचरा दोनों मूल्यों को एकत्र करता है, इसलिए उपर्युक्त दोनों रूप ठीक हैं।
के शब्दों में:
ध्यान दें कि, के विपरीत सी में, यह एक स्थानीय चर का पता वापस जाने के लिए पूरी तरह से ठीक है; फंक्शन रिटर्न के बाद चर के साथ जुड़े भंडारण जीवित रहता है। वास्तव में, एक समग्र शाब्दिक का पता लेते समय प्रत्येक बार मूल्यांकन किए जाने पर एक ताजा उदाहरण आवंटित करता है, इसलिए हम इन अंतिम दो पंक्तियों को जोड़ सकते हैं।
लेकिन यह सवाल के एक जोड़े को जन्म देती है।
1 - उदाहरण 1 में, संरचना ढेर पर घोषित की जाती है। उदाहरण 2 के बारे में क्या? क्या यह स्टैक पर उसी तरह घोषित किया गया है जैसे सी में होगा या यह ढेर पर भी जाता है?
2 - यदि उदाहरण 2 स्टैक पर घोषित किया गया है, तो फ़ंक्शन रिटर्न के बाद यह कैसे उपलब्ध रहता है?
3 - यदि उदाहरण 2 वास्तव में ढेर पर घोषित किया गया है, तो यह कैसे है कि संदर्भ के आधार पर structs मूल्य से पारित किया जाता है? इस मामले में पॉइंटर्स का क्या मतलब है?
उत्कृष्ट धन्यवाद। मैं वास्तव में नहीं पूछ रहा था कि "पॉइंटर्स का बिंदु क्या है", यह "पॉइंटर्स की तरह व्यवहार करने के लिए पॉइंटर्स का बिंदु क्या है" की तरह अधिक था, और यह मामला वैसे भी आपके उत्तर द्वारा प्रस्तुत किया जाता है। – Joe
असेंबली की एक छोटी व्याख्या की सराहना की जाएगी। – ElefEnt