Mengembalikan Penunjuk kepada Struktur Setempat
Dalam Go, coretan kod seperti berikut mungkin menimbulkan kebimbangan bagi pengaturcara dengan latar belakang C:
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
Timbul persoalan: Adakah newPoint memperuntukkan titik baharu pada timbunan atau timbunan?
Analisis Melarikan Penunjuk
Jawapannya terletak pada analisis melarikan diri penunjuk Go. Ia meneliti fungsi dan menentukan sama ada pembolehubah penunjuk melarikan diri daripada timbunan tempatan. Jika ia berlaku, objek diperuntukkan pada timbunan, memastikan keselamatan memori sepanjang atur cara.
Dalam sampel kod ini, pembolehubah penuding melarikan diri daripada tindanan setempat kerana ia dikembalikan kepada pemanggil. Oleh itu, Go akan memperuntukkan struct titik pada timbunan untuk menjamin keselamatan memori.
Jika penuding tidak terlepas daripada fungsi setempat, pengkompil akan bebas untuk memperuntukkannya pada tindanan. Walau bagaimanapun, lokasi peruntukan tidak dijamin, kerana ia bergantung pada ketepatan analisis melarikan diri penunjuk.
Atas ialah kandungan terperinci Adakah `newPoint()` Go Memperuntukkan Struct pada Stack atau Heap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!