Sobes.tech
Junior — Middle

რა ტიპის მეხსიერებები არსებობს და როგორ ურთიერთქმედებენ ისინი ერთმანეთთან?

sobes.tech AI

პასუხი AI-სგან

Go (Golang) ენის ძირითად ტიპებსა და მათი ურთიერთქმედება შემდეგია:

  • Stack (სტეკი) — ინახავს ფუნქციების ადგილობრივ ცვლადებს. სტეკი სწრაფად განაწილდება და გათავისუფლდება ფუნქციის გამოძახების და დაბრუნებისას.

  • Heap (ჰიპი) — გამოიყენება დინამიური მეხსიერების განაწილებისთვის, მაგალითად, ობიექტებისთვის, რომლებიც ცხოვრობენ უფრო დიდხანს, ვიდრე მიმდინარე ფუნქცია. Go-ს აქვს გარბიჯის კოლექციონერი, რომელიც მართავს ჰიპის სისუფთავეს.

  • გლობალური/სტატიკური მეხსიერება — გლობალური ცვლადებისა და კონსტანტებისთვის.

ურთიერთქმედება:

  • ფუნქციის გამოძახებისას, ადგილობრივი ცვლადები განთავსდება სტეკზე.
  • თუ ცვლადი უნდა იცოცხლოს უფრო დიდხანს, კომპილატორი შეუძლია "გაქცევის ანალიზის" საშუალებით გადაიტანოს იგი ჰიპზე.
  • გარბიჯის კოლექციონერი ავტომატურად ანთავისუფლებს მეხსიერებას ჰიპზე, როდესაც ობიექტები მიუწვდომელი ხდება.

მაგალითი:

func foo() *int {
    x := 10
    return &x // x "გაქცევა" ჰიპზე, რადგან დაბრუნებულია მაჩვენებელი
}

აქ, ცვლადი x განთავსდება ჰიპზე, რათა მაჩვენებელი დარჩეს ვალიდური ფუნქციის დატოვების შემდეგ.