Junior — Middle
რა ტიპის მეხსიერებები არსებობს და როგორ ურთიერთქმედებენ ისინი ერთმანეთთან?
sobes.tech AI
პასუხი AI-სგან
Go (Golang) ენის ძირითად ტიპებსა და მათი ურთიერთქმედება შემდეგია:
-
Stack (სტეკი) — ინახავს ფუნქციების ადგილობრივ ცვლადებს. სტეკი სწრაფად განაწილდება და გათავისუფლდება ფუნქციის გამოძახების და დაბრუნებისას.
-
Heap (ჰიპი) — გამოიყენება დინამიური მეხსიერების განაწილებისთვის, მაგალითად, ობიექტებისთვის, რომლებიც ცხოვრობენ უფრო დიდხანს, ვიდრე მიმდინარე ფუნქცია. Go-ს აქვს გარბიჯის კოლექციონერი, რომელიც მართავს ჰიპის სისუფთავეს.
-
გლობალური/სტატიკური მეხსიერება — გლობალური ცვლადებისა და კონსტანტებისთვის.
ურთიერთქმედება:
- ფუნქციის გამოძახებისას, ადგილობრივი ცვლადები განთავსდება სტეკზე.
- თუ ცვლადი უნდა იცოცხლოს უფრო დიდხანს, კომპილატორი შეუძლია "გაქცევის ანალიზის" საშუალებით გადაიტანოს იგი ჰიპზე.
- გარბიჯის კოლექციონერი ავტომატურად ანთავისუფლებს მეხსიერებას ჰიპზე, როდესაც ობიექტები მიუწვდომელი ხდება.
მაგალითი:
func foo() *int {
x := 10
return &x // x "გაქცევა" ჰიპზე, რადგან დაბრუნებულია მაჩვენებელი
}
აქ, ცვლადი x განთავსდება ჰიპზე, რათა მაჩვენებელი დარჩეს ვალიდური ფუნქციის დატოვების შემდეგ.