Αποστολέας Θέμα: Συνάρτηση και στοίβα χρόνου εκτέλεσης .  (Αναγνώστηκε 6285 φορές)

ΨΥΛΛΟΣ ΣΩΤΗΡΗΣ

  • Ομάδα διαγωνισμάτων 2009
  • *
  • Μηνύματα: 57
Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« στις: 30 Μάρ 2009, 12:45:39 μμ »
Όταν καλούμε συνάρτηση στη στοίβα χρόνου εκτέλεσης αποθηκεύετε η επόμενη διεύθυνση?
Π.χ

   κ.π
12  κ <--φ(χ) + 3
13

Θα αποθηκευτεί το 12 ή το 13

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3145
  • to Iterate is human to Recurse divine
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #1 στις: 30 Μάρ 2009, 01:57:33 μμ »
Λογικά όχι γιατί η κλήση της συνάρτησης αποτελεί ουσιαστικά τον υπολογισμό μιας παράστασης. Στη συνέχεια πρέπει να επιστρέψει στο ίδιο σημείο την τιμή που επιστρέφει η συνάρτηση και να εκτελεστεί η εντολή που περιέχει την κλήση της συνάρτησης
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

ΨΥΛΛΟΣ ΣΩΤΗΡΗΣ

  • Ομάδα διαγωνισμάτων 2009
  • *
  • Μηνύματα: 57
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #2 στις: 30 Μάρ 2009, 05:03:00 μμ »
Συμφωνώ απόλυτα
Άρα η θεωρία θα έπρεπε να έλεγε αποθηκεύεται η επόμενη διεύθυνση όταν καλούμε διαδικασία ενώ σε συνάρτηση η ίδια.
 Πολύ το φοβάμαι κάτι τέτοιο αν μπει να προκαλέσει σύγχυση.

ntzios kostas

  • Καθηγητής Πληροφορικής
  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 599
    • Ανάπτυξη Εφαρμογών
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #3 στις: 30 Μάρ 2009, 05:57:40 μμ »
Σε αυτό το θέμα μόνο να κοιτάξεις τον τίτλο της συγκεκτιμένης παραγράφου θα δεις ότι υπάρχει πρόβλημα. Η χρήση στοίβας στην κλήση διαδικασιών
Το μάθημα Ανάπτυξη Εφαρμογών δεν έχει σαν στόχο την εκμάθηση κάποιου συγκεκριμένου προγραμματιστικού περιβάλλοντος ούτε την καλλιέργεια προγραμματιστικών δεξιοτήτων από τη μεριά των μαθητών. Δεν αποσκοπεί στη λεπτομερειακή εξέταση της δομής, του ρεπερτορίου και των συντακτικων κανόνων κάποιας γλώσσας...

Παναγιώτης Τσιωτάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3176
  • I love you 3000
    • Panagiotis Tsiotakis
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #4 στις: 30 Μάρ 2009, 10:02:42 μμ »
Συμφωνώ με τους προλαλήσαντες.

Πάντως είναι απλή λογική αυτό που λέει ο Ευρυπίδης. Μπορεί να μπει μόνο με διαδικασίες!!

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4925
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #5 στις: 30 Μάρ 2009, 11:35:49 μμ »
Όταν καλούμε συνάρτηση στη στοίβα χρόνου εκτέλεσης αποθηκεύετε η επόμενη διεύθυνση?

Η στοίβα χρόνου εκτέλεσης δεν έχει καμία σχέση με γραμμές ή high level εντολές, άρα δεν αποθηκεύεται ούτε το 12 ούτε το 13.
Αποθηκεύεται η διεύθυνση μνήμης RAM της επόμενης (ή της τρέχουσας) εντολής μηχανής - αυτή συνήθως δείχνεται από κάποιον καταχωρητή (σε αρχιτεκτονική x86 ονομάζεται IP, Instruction Pointer).
Το ίδιο ισχύει και για διαδικασίες και για συναρτήσεις, αφού και οι δύο υλοποιούνται με εντολή call.
Συνήθως αποθηκεύεται η επόμενη θέση μνήμης (επειδή η τρέχουσα μπορεί να έχει μεταβλητό μέγεθος οπότε η ίδια ξέρει καλύτερα πόσο να αυξήσει τον IP) αλλά αυτό δεν είναι και απόλυτο.

Δεν κοίταξα πρόσφατα το σχετικό σημείο θεωρίας για να δω πώς (και αν) αντιστοιχούν στο σχολικό εγχειρίδιο τα παραπάνω. Πάντως αν γράφει για γραμμές κώδικα είναι λάθος.

Neo

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 19
  • Γράψτε το προσωπικό σας σλόγκαν!
    • AEPP
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #6 στις: 30 Μάρ 2009, 11:53:34 μμ »
 8) ::)
Όταν καλούμε συνάρτηση στη στοίβα χρόνου εκτέλεσης αποθηκεύετε η επόμενη διεύθυνση?

Η στοίβα χρόνου εκτέλεσης δεν έχει καμία σχέση με γραμμές ή high level εντολές, άρα δεν αποθηκεύεται ούτε το 12 ούτε το 13.
Αποθηκεύεται η διεύθυνση μνήμης RAM της επόμενης (ή της τρέχουσας) εντολής μηχανής - αυτή συνήθως δείχνεται από κάποιον καταχωρητή (σε αρχιτεκτονική x86 ονομάζεται IP, Instruction Pointer).
Το ίδιο ισχύει και για διαδικασίες και για συναρτήσεις, αφού και οι δύο υλοποιούνται με εντολή call.
Συνήθως αποθηκεύεται η επόμενη θέση μνήμης (επειδή η τρέχουσα μπορεί να έχει μεταβλητό μέγεθος οπότε η ίδια ξέρει καλύτερα πόσο να αυξήσει τον IP) αλλά αυτό δεν είναι και απόλυτο.

Δεν κοίταξα πρόσφατα το σχετικό σημείο θεωρίας για να δω πώς (και αν) αντιστοιχούν στο σχολικό εγχειρίδιο τα παραπάνω. Πάντως αν γράφει για γραμμές κώδικα είναι λάθος.
Σταματάκης Μανώλης

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3145
  • to Iterate is human to Recurse divine
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #7 στις: 31 Μάρ 2009, 12:42:22 πμ »
Στο βιβλίο μιλάει ξεκάθαρα για την "αμέσως επόμενη διεύθυνση του κυρίου προγράμματος"

Το κορυφαίο όμως είναι ότι ενώ ο τίτλος λέει "Η χρήση στοίβας στην κλήση διαδικασιών" μέσα στο πλαίσιο λέει ξεκάθαρα

 Όταν μια διαδικασία ή συνάρτηση καλείται από το κύριο πρόγραμμα, τότε η αμέσως επόμενη διεύθυνση, του κυρίου προγράμματος που ονομάζεται διεύθυνση επιστροφής .......

Ποιά κοινή λογική που έλεγα εγώ και ποιά γλώσσα μηχανής που λέει ο Άλκης? αφού το λέει το βιβλίο τελεία και παύλα.

Αυτό που μου αρέσει πάντως με το βιβλίο δεν είναι μόνο ότι έχει αρκετά πράγματα τα οποία δεν ισχύουν στον πραγματικό κόσμο της πληροφορικής αλλά ότι πηγαίνει και κόντρα στην κοινή λογική.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4925
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #8 στις: 31 Μάρ 2009, 07:07:41 πμ »
Κώδικας: [Επιλογή]
12: α <- ΗΜ(χ) * ΣΥΝ(χ)
13: ...

Η γραμμή 12 αντιστοιχεί σε π.χ. 20 εντολές μηχανής.
Περιέχει δύο κλήσεις συναρτήσεων.
Δεν είναι δυνατόν να αποθηκεύεται η ίδια διεύθυνση στη στοίβα (το 12 ή το 13 στο παραπάνω παράδειγμα) και για τις δύο αυτές κλήσεις.
Θα έπρεπε τουλάχιστον να αποθηκεύεται "διεύθυνση επιστροφής: μετά την πρώτη κλήση συνάρτησης της 12 γραμμής"
ή "διεύθυνση επιστροφής: μετά την δεύτερη κλήση συνάρτησης της 12 γραμμής".

Γι' αυτό λέω ότι δεν υπάρχει αντιστοιχία στοίβας κλήσεων με high level εντολές - αφού μια high level εντολή μπορεί να περιέχει πολλές κλήσεις.
Σύμφωνοι, να στηρίξουμε το διδακτικό πακέτο, αλλά με κάποιο όριο, να μη φτάνουμε στο σημείο να λέμε παράλογες ή ανυπόστατες θεωρίες...

Απλά εννούνται τα παρακάτω έντονα γράμματα:
"Όταν μια διαδικασία ή συνάρτηση καλείται από το κύριο πρόγραμμα, τότε η αμέσως επόμενη διεύθυνση της μνήμης RAM, που αντιστοιχεί στην επόμενη εντολή μηχανής του κυρίου προγράμματος που ονομάζεται διεύθυνση επιστροφής..."
:P :P :P :D :D :D

Καλημέρα σε όλους.

klitos

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 133
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #9 στις: 08 Μάι 2009, 09:31:46 πμ »
πιστευω οτι επιστρεφει στην επομενη εντολη για δυο λογους.
1ος λογος: αν επεστρεφε στην ιδια εντολη θα γινοταν παλι κληση της συναρτησης
2ος λογος: Η στοιβα χρονισμου μας λεει ποια ειναι η επομενη εντολη που θα εκτελεστει, θεωρωντας οτι οταν εκτελειται ενα υποπρογραμμα εκτελειται η εντολη του κυριου προγραμματος απο την οποια εγινε η κληση.
Αρα συμπεραινω οτι οταν τελειωνει ενα υποπρογραμμα επιστρεφουν οι τιμες στις παραμετρους και "συνεχιζεται" η εντολη απο την οια εγινε η κληση.
κλητος χατζηγεωργιου

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3145
  • to Iterate is human to Recurse divine
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #10 στις: 08 Μάι 2009, 10:25:31 πμ »
Αφού συνεχίζεται η ίδια εντολή μετά την κλήση, δηλαδή εκτελείται η εντολή εκχώρησης, τότε δεν πηγαίνει στην επομενη εντολή!!

Αρα συμπεραινω οτι οταν τελειωνει ενα υποπρογραμμα επιστρεφουν οι τιμες στις παραμετρους και "συνεχιζεται" η εντολη απο την οια εγινε η κληση.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

klitos

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 133
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #11 στις: 08 Μάι 2009, 10:59:59 πμ »
ακριβως ετσι ...γιαυτο λεω οτι η επομενη εντολη που θα εκτελεστει ειναι αυτη που ακολουθεί
κλητος χατζηγεωργιου

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3145
  • to Iterate is human to Recurse divine
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #12 στις: 08 Μάι 2009, 12:44:11 μμ »
δεν κατάλαβες τι εννοώ ή δεν το διατύπωσα καλά.
Είπα ότι με το δικό σου σκεπτικό δεν θα πάει στην επόμενη εντολή αλλά θα εκτελέσει εκείνη την εντολή που εκχωρεί την τιμή της συνάρτησης που είναι στο δεξιό μέλος της εντολής εκχώρησης. Αυτή μπορεί να είναι μια εντολή μηχανής, π.χ. STORE A B ή κάτι τέτοιο, άρα σίγουρα δεν πάει στην επόμενη εντολή του κυρίου προγράμματος
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

klitos

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 133
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #13 στις: 08 Μάι 2009, 11:30:05 μμ »
ΕΝΤ1
υποπρογραμμα (συναρτηση ή διαδικασια)
ΕΝΤ2

Ναι ετσι...δηλαδη θα παει στην ΕΝΤ2 οταν θα τελειώσει με τις αναθεσεις τιμών (τιμες παραμετρων κλπ), πραξεις κλπ ...δηλαδη συνεχιζει την εντολη απο την οποια εφυγε ....αλλα βεβαια η ΕΠΟΜΕΝΗ εντολή θα ειναι η ΕΝΤ2 (θα επιστρεψει στην ΕΝΤ2 αφου τελειώσει με την τρεχουσα εκκρεμοτητα)
Δινω αυτη την ερμηνεια για να καλυψω το κενο στην απορια ʽαφου εκτελειται η ΕΝΤ2 μετα το τελος του υποπρογραμματος τοτε πως και ποτε επιστρεφουν οι τιμες των παραμετρων; ʽ 
κλητος χατζηγεωργιου

lykos

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 143
  • Καλύτερα ταξιδάκια, παρά project
Απ: Συνάρτηση και στοίβα χρόνου εκτέλεσης .
« Απάντηση #14 στις: 08 Μάι 2009, 11:45:34 μμ »
Κι' όλη η συζήτηση, διότι έχουμε ένα προβληματικό βιβλίο...
Ενα - στην τύχη - απ' το εμπόριο να παίρναν (Pascal, Basic, C, ...), θα είχαμε το χρόνο να συζητάμε για πράγματα ουσίας! (αντί του "τι θέλει να πεί ο ποιητής". Ισως κι' αυτός να μην ξέρει ακριβώς...)

ΥΓ. Ο "ποιητής" δεν φταίει, κι' ούτε - φυσικά - τον γνωρίζω. Ούτε την διαδικασία επιλογής των Σχολ. Βιβλίων γνωρίζω. Απ' ότι φαίνεται όμως, αυτή η επιλογή δημιουργεί προβλήματα.