Quay lại con trỏ đến cấu trúc cục bộ


85

Tôi thấy một số mẫu mã có cấu trúc như sau:

type point struct {
  x, y int
}

func newPoint() *point {
  return &point{10, 20}
}

Tôi có nền tảng C ++ và nó có vẻ như là lỗi đối với tôi. Ngữ nghĩa của cấu trúc như vậy là gì? Điểm mới được phân bổ trên ngăn xếp hay đống?


1
Một câu hỏi tương tự (câu trả lời liên kết đến tài liệu): stackoverflow.com/questions/12098435/…
Denys Séguret

@ DenysSéguret nó không tương tự
mangusta

Câu trả lời:


109

Go thực hiện phân tích thoát con trỏ. Nếu con trỏ thoát khỏi ngăn xếp cục bộ, mà nó thực hiện trong trường hợp này, thì đối tượng sẽ được cấp phát trên heap. Nếu nó không thoát khỏi hàm cục bộ, trình biên dịch có thể tự do cấp phát nó trên ngăn xếp (mặc dù nó không đảm bảo; điều đó phụ thuộc vào việc phân tích thoát con trỏ có thể chứng minh rằng con trỏ vẫn cục bộ với hàm này hay không).


13
Đây là một bài đăng trên blog (tuyên bố từ chối trách nhiệm: mà tôi đã viết) xem xét phân tích thoát hiểm của Go kỹ hơn một chút: scvalex.net/posts/29
scvalex

@LilyBallard không hoàn toàn nhận được câu trả lời của bạn. Ý bạn là việc chứng minh sự kiện con trỏ thoát luôn có thể thực hiện được, trong khi việc chứng minh sự thật KHÔNG thoát thì không?
mangusta

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.