Управление памятью возвращаемых указателей: безопасная практика в Go
в C, возвращая указатель к переменной, спланированной стеком, может привести к не определенному поведению из-за удаления памяти при возврате функции. Это поднимает вопрос о том, происходит ли подобное поведение в Go, и безопасно ли вернуть такие указатели. Компилятор не генерирует никаких ошибок для возврата указателей с помощью стека, таких как следующий пример:
Main Package импорт ( "FMT" ) func main () { fmt.println (*(что -то ())) } func nome () *string { S: = "A" Возврат & s }
package main import ( "fmt" ) func main() { fmt.Println(*(something())) } func something() *string { s := "a" return &s }
GO FAQ кратко объясняет правило, касающееся распределения памяти: если компилятор не может доказать, что переменная больше не ссылается на ошибку. Эта стратегия устраняет необходимость ручного управления памятью и гарантирует, что заостренные данные остаются доступными после возврата функции. Этот вариант даст представление о решениях, принятых в отношении распределения кучи и стека.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3