2016-07-06 11 views
9

पर एक पॉइंटर लौटाते हुए सी में जब मैं किसी फ़ंक्शन से स्टैक-निर्मित चर के पॉइंटर को वापस लौटाता हूं, तो फ़ंक्शन लौटने के बाद मेमोरी छोड़ देता है, इस प्रकार पॉइंटर को अपरिवर्तनीय बनाना असंभव हो जाता है। लेकिन जाओ में, संकलक मुझे कोई त्रुटि नहीं दे रहा है। क्या इसका मतलब यह है कि यह करना सुरक्षित है?जाओ - स्टैक

package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println(*(something())) 
} 

func something() *string { 
    s := "a" 
    return &s 
} 

उत्तर

10

हाँ, यह गो प्रोग्रामिंग में सुरक्षित और सामान्य पैटर्न है। जाओ escape analysis का उपयोग पॉइंटर्स के साथ किसी भी मान को स्थानांतरित करने के लिए करता है जो स्वचालित रूप से ढेर से ढेर से बचते हैं। आपको इस बात से चिंतित होने की आवश्यकता नहीं है कि मूल्य कहां आवंटित किए जाते हैं।

जाओ पूछे जाने वाले प्रश्न से: "How do I know whether a variable is allocated on the heap or the stack?"

अगर संकलक साबित नहीं कर सकते कि चर समारोह रिटर्न के बाद संदर्भित नहीं है, तो संकलक कचरा-एकत्र ढेर पर चर सूचक त्रुटियों झूलते से बचने के लिए आवंटित करना चाहिए

आप -gcflags -m विकल्प का उपयोग करके संकलन के दौरान इन अनुकूलन विकल्पों को देख सकते हैं।

3

हां, गोलांग में स्थानीय सूचकांक में सूचक को वापस करना ठीक है। गोलांग आपके लिए ऑब्जेक्ट्स का जीवनकाल प्रबंधित करेगा और इसे मुक्त करेगा जब सभी पॉइंटर्स इसे चले गए हैं।

एक और जवाब में मैं सी/सी ++ पॉइंटर्स और गोलांग पॉइंटर्स के बीच सभी मतभेदों को इंगित करता हूं: What is the meaning of '*' and '&' in Golang?