Sobes.tech
Junior — Middle

Ποιες ενέργειες εκτελούνται στη στοίβα κατά την εκτέλεση μιας λειτουργίας σε ένα πρόγραμμα;

sobes.tech AI

Απάντηση από AI

Κατά την κλήση μιας συνάρτησης σε ένα πρόγραμμα Go (και στις περισσότερες γλώσσες με υποστήριξη για τη στοίβα κλήσεων), συμβαίνουν τα εξής:

  1. Αποθηκεύεται ένα πλαίσιο στοίβας (stack frame) — μια περιοχή μνήμης για την αποθήκευση τοπικών μεταβλητών, παραμέτρων και της διεύθυνσης επιστροφής.
  2. Αποθηκεύεται η διεύθυνση επιστροφής — ώστε μετά το τέλος της συνάρτησης, το πρόγραμμα να συνεχίσει από το σωστό σημείο.
  3. Οι παράμετροι της συνάρτησης αντιγράφονται — οι τιμές των επιχειρημάτων μεταφέρονται στο νέο πλαίσιο.
  4. Οι τοπικές μεταβλητές αρχικοποιούνται — δεσμεύεται μνήμη και, αν χρειάζεται, τίθενται αρχικές τιμές.

Μετά την εκτέλεση της συνάρτησης, το πλαίσιο της στοίβας διαγράφεται και ο έλεγχος επιστρέφει στη διατηρημένη διεύθυνση.

Παράδειγμα (απλοποιημένο):

func add(a, b int) int {
    sum := a + b
    return sum
}

func main() {
    result := add(2, 3)
    fmt.Println(result) // 5
}

Κατά την κλήση της add, δημιουργείται ένα πλαίσιο στη στοίβα με τις παραμέτρους a=2, b=3, τη τοπική μεταβλητή sum και τη διεύθυνση επιστροφής στο main.