iJohnnyCash
e-steki.gr Founder


Κατάρχας μπορούμε να φανταστούμε απλοϊκά την θέσεις μνήμης κάπους έτσι.
Στα αριστερά κουτία είναι η διευθύνση της θεσης και αν θυμάμαι κάλα η διεύθυνση παριστάνεται με αριθμούς που ξεκινάνε απο το μηδεν. Δλδ αν η μνήμη έχει n θέσεις τότε η τελεύταια θέση θα έχει διεύθυνση n-1 και η πρώτη 0.
Στα δεξια κουτία μπαίνουν τα δεδομένα
Σωστά μέχρι εδώ; Γμτ ... έχω χάσει το βιβλίο που μίλαγε για της θέσεις μνήμης ... με αποτέλεσμα που τώρα που το χρειάζομαι ... να ψάχνομαι
Υ.γ.: Ο λόγος που το έβαλα στον προγραμματισμό είναι οτι οι απορίες μου δεν σταματάνε εδώ ... απλώς δεν έχω χρόνο να της αναπτύξω τώρα.
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.



Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
iJohnnyCash
e-steki.gr Founder


Αν θυμαμαι καλα μια γλωσσα συνηθως για τις μεταβλητες δημιουργει εναν πινακα σαν αυτον στο πρωτο ποστ και στην αριστερη στηλη βαζει το ονομα της μεταβλητης και στην δεξια την τιμη της ...
σωστα;
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
modkay
Εκκολαπτόμενο μέλος


Δεν είναι τόσο ανεπτυγμένο αυτό το μάθημα.Για πίνακες θα μάθεις αργότερα στο κεφάλαιο 6 νομίζω.
Αν πάλι δεν ρωτάς για το μάθημα ας απαντήσει κάποιος άλλος

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Demelene
Διάσημο μέλος


Αρχική Δημοσίευση από Exposed_Bone:Πολυ ωραια ... αλλη μια απορια ...
Αν θυμαμαι καλα μια γλωσσα συνηθως για τις μεταβλητες δημιουργει εναν πινακα σαν αυτον στο πρωτο ποστ και στην αριστερη στηλη βαζει το ονομα της μεταβλητης και στην δεξια την τιμη της ...
σωστα;
Πολύ χονδρικά και μόνο με την ιδέα του TableOfContents. Πρακτικά το αποτέλεσμα ενός compilation δεν έχει ονόματα μεταβλητών παρά μόνο θέσεις μνήμης.
Φαντάζομαι ότι το θές για σχολείο και επειδή δεν ξέρω ακριβώς την ύλη που κάνεται που αν κρίνω και από τα δικά μου χρόνια μάλλον θα έχει πολλά λάθη ίσως η βοήθεια μου να μην είναι κατάλληλη γιατί εγώ θα σου πω τι ακριβώς γίνεται θεωρητικά (και από θεωρία στο πανεπιστήμιο) αλλά και πρακτικά ως χρόνια προγραμματιστης σε c++.
Πάντως οι ερωτήσεις σου είναι κάπως αόριστες συνεπώς αν μπορείς λίγο πιο συγκεκριμένα θα βοήθαγε. Εγώ όταν διάβασα την ερώτηση σου σκέφτηκα 4 πιθανές περιπτώσεις. Καλό θα ήταν να μου πεις ως προς τι προσανατολισμένές είναι οι ερωτήσεις σου. πχ hardware software??
¨οτι χρειαστείς να χαρώ να σε βοηθήσω.
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
iJohnnyCash
e-steki.gr Founder


Αυτο που θελω να δω ειναι τι θα γινονταν αν χρησιμοποιησω μια μεταβλητη που δεν της εχω δωσει τιμη.
Για παραδειγμα, θυμαμαι οτι διαβαζα γενικα για τον προγραμματισμο οτι αν η γλωσσα δεν εχει μηχανισμους αποφυγεις τετοιων λαθων τοτε το παρακατω κομματι θα βγαζει συνεχεια διαφορετικα αποτελεσματα επειδη καθε φορα η μεταβλητη που δεν εχει τιμη , η β, θα παιρνει τυχαιες τιμες και αυτο επειδη μπορει να πεσει σε θεση μνημης που περιεχει καποιο περιεχομενο ...
Α <- 5
Β <- Α + Β
Δεν θυμαμαι περισσοτερο για αυτο ... και θελω να δω αν οντως ισχυει και πως ακριβως ισχυει

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Subject to change
e-steki.gr Founder



Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
giostau
Πολύ δραστήριο μέλος


τότε κατά την εκτέλεση του προγράμματος, η μεταβλητή Β θα πάρει ό,τι τιμή έχει εκείνη τη στιγμή η θέση μνήμης στην οποία αντιστοιχεί!
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Demelene
Διάσημο μέλος


Κοίτα συνδυάζοντας την ηλικία και το θέμα βιβλία αλλά ξεχνώντας ότι είναι περίοδος διακοπών έβγαλα το λάθος συμπέρασμα. Δυστυχώς όμως και καλώς ή κακώς η εποχή που το ξεσκονίζαμε το μηχάνημα softwarικά και harwarικά έχει περάσει άλλο αυτό είναι άλλο θέμα. Εγώ έμαθα γιατί γούσταρα και για το σχολείο ούτε συζήτησηΑρχική Δημοσίευση από Michelle:Πραγματικά με στεναχωρεί να βλέπω οτι όποτε κάποιος ρωτάει κάτι σχετικό με υπολογιστές ή προγραμματισμό θα υπάρξουν πολλοί που θα θεωρήσουν αυτονόητο οτι το θέλει για το σχολείο... Λες και μόνο για το σχολείο μπορεί να ενδιαφέρεται κανείς για κάτι τέτοιο...![]()
Αρχική Δημοσίευση από Exposed_Bone:Οι ερωτησεις που θετω δεν αφορουν καποιο μαθημα ... ειναι καθαρα για προσωπικες γνωσεις.
Αυτο που θελω να δω ειναι τι θα γινονταν αν χρησιμοποιησω μια μεταβλητη που δεν της εχω δωσει τιμη.
Για παραδειγμα, θυμαμαι οτι διαβαζα γενικα για τον προγραμματισμο οτι αν η γλωσσα δεν εχει μηχανισμους αποφυγεις τετοιων λαθων τοτε το παρακατω κομματι θα βγαζει συνεχεια διαφορετικα αποτελεσματα επειδη καθε φορα η μεταβλητη που δεν εχει τιμη , η β, θα παιρνει τυχαιες τιμες και αυτο επειδη μπορει να πεσει σε θεση μνημης που περιεχει καποιο περιεχομενο ...
Code:Α <- 5 Β <- Α + Β
Δεν θυμαμαι περισσοτερο για αυτο ... και θελω να δω αν οντως ισχυει και πως ακριβως ισχυει![]()
Επί του θέματος. Πρόσεξε.΄Αυτό που λές σαν ιδέα είναι σωστό αλλά έχει πρακτικά δύο μορφές.
Η βασική ιδέα είναι ναι ότι όταν ορίσεις μια μεταβλητή τότε αυτή αυτομάτως θα έχει τιμή αυτό που αντιστοιχεί στις θέσεις μνήμης που έπιασε.
Αυτό ακριβώς συμβαίνει όταν χρησιμοποιείς pointers!To σύστημα σου επιστρέφει μια θέση μνήμης και εσύ βλέπεις ότι έχει ξεμείνει εκεί. Εξού και το κλασσικο define στην C με το ZeroFill! Αν θες στο γράφω
Από εκεί και μετά όμως και θεωρόντας την C την πιο lowlevel γλώσσα αυτή την στιγμή δεν υπάρχει τέτοιο πρόβλημα έξω από κάποιες εξαιρέσεις στην C.
Σε όλες τις υπόλοιπες γλώσσες ότι μεταβλητή και να δηλώσεις αρχικοποιείται αυτόματα με την default τιμή. 0 για νούμερα και άδειο κείμενο για τα strings.
Στην C επειδή έτοιμο variable type δεν υπάρχει για κείμενο, οποιαδήποτε χρήση κειμένου γίνεται μόνο μεσω pointers ή με char array.
Στην περίπτωση του char array γίνεται και μια αρχικοποιήση εξαιτείας ενός μηχανισμού που εμείς δεν βλέπουμε!
Όταν στην C εγώ δηλώσω κάτι σαν int a τότε στο μηχάνημα μέσα τρέχει ένας αυτόματος πρακτικά κώδικας που δεσμεύει μνήμη και την αρχικοποιεί και βαπτίζει το a σαν το περιεχόμενο της θέσης μνήμης που του δόθηκε! Το ίδιο γίνεται και με τα arrays στα οποία όταν γράψω char a[10]="kati"; τότε δεσμεύεται 10 συνεχείς θέσεις μνήμης και αρχικοποιούνται με 'k' 'a' 't'' i'' \0'. Αν δεν υπάρχει το a[10] τότε απλά μπαίνει το '\0' μόνο.
Και φυσικά επειδή αυτά έχουν γίνει αυτόματα στο entry point κάθε συνάρτησης το πρόγραμμα ξέρει και αυτόματα ποιες να απελευθερώσει.
Αυτή είναι η βασική ιδέα. Στις σύγχρονες γλώσσες προγραμματισμού όλα αυτά γίνονται runtime συγκεκριμένα με την ίδια λογικά, μόνο πιο καμουφλαρισμένη και πιο εύχρηστη.
Συγκεκριμένα πάντως να ξέρεις η .NET δεν σε αφήνει να χρησιμοποιήσεις μια μεταβλητή που δεν έχει αρχικοποιηθεί γιατί κάποια σχέση έχει νομίζω με το αυτόματο garbage collection.
Γενικά σαν τρόπος προγραμματισμού μια μεταβλητή ή θα πάρει σε ένα σημείο του προγράμματος σου δεδομένα συνεπώς θα αρχικοποιηθεί ή μπορεί να δουλεύει σαν ένα constant (αρχικό ή μόνιμο) συνεπώς η αρχικοποιήση της είναι δεδομένη. Το να υπάρχει μια μεταβλητή της οποίας θα χρησιμοποιήσεις το value χωρίς να ανήκει σε κάτι από τα παραπάνω είναι λογικό λάθος.
Αυτά. Ελπίζω να βοήθησα. Ρϊξε και άλλες απορίες όσο προλαβαίνω
Αμάν πορώθηκα!
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
iJohnnyCash
e-steki.gr Founder


demelene μιλαω σε θεωρετικο επιπεδο ...
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
gademis
Τιμώμενο Μέλος


Για το πως αναπαριστούνται οι μεταβλητές στη μνήμη
Στη C: Κατα το compilation δημιουργείται ο πίνακας που λές* (symbol table λεγεται) και το εκτελεσιμο αρχείο έχει κατ ευθείαν τις διευθύνσεις. Ο compiler φροντίζει ξεροντας το μέγεθος του κάθε τύπου να βαλει τις διευθύνσεις έτσι ωστε να είναι "ξεχωριστα" η μνημη καθε μεταβλητής. Για πίνακες γινεται το ίδιο αλλα με πολλαπλάσιο χώρ, δηλαδη ενα int[10] "δεσμεύει" 10 φορες παραπανω χωρο απο ενα int. Βαζω εισαγωγικα στο δεσμευει γιατι δεν σε εμποδιζει κανενας απο το να πας να γραψεις πανω στο χώρο μιας άλλης μεταβλητης, αμα πας να προσπελάσεις το 11ο στοιχιο του πίνακα με 10 στοιχία 99% θα σου βγαλει οχι λαθος αλλα την τιμή της επομενης μεταβλητης που εχεις ορισει. Αυτο το αισχος έχει ευτυχώς διορθωθεί στις πιο μοντερνες γλώσσες.
*Το symbol table δεν εχει μονο τις δικές σου μεταβλητες αλλα πολλές αλλες. Σκέψου οτι αν εχεις το A<=B+(C+D) ο compiler δημιουργει μια μεταβλητη με ονομα ενα ακαταλαβιστικο Ζ7HRFKLHR για να αποθηκευσει μεσα το αποτελεσμα του (C+D) γιατι μπορει να κανει μονο προσθεση 2 αριθμών τη φορα. Μετα προσθέτει το Β στο Ζ7HRFKLHR και θετει στο Α το αποτελεσμα.
Στις "interpreted" γλωσσες (javascript, Perl, PHP και πολλες αλλες):
Εκει δεν γινεται compilation οποτε το symbol table υπάρχει μονίμως. Εχει μεσα απο τη μια το ονομα και απο την αλλη τη διευθυνση της αρχής της μεταβλητης (επίσης κραταει και τον τυπο σε μια 3η στηλη για να ξερει το μεγεθος) Ολες οι μεταβλητές ειναι δυναμικές γιατι μπορείς να προσθέσεις και να αφαιρέσεις δυναμικά μεταβλητες στις περισσότερες απο αυτές τις γλώσσες.
Java / .NET
Εκει έχεις μεν καπου στατικα ορισμένες τις στατικές μεταβλητές αλλα το virtual machine δε σε αφήνει να προσπελάσεις τη μνήμη τους παρα μονο μεσα απο τις μεταβλητες αυτές. Αυτό έχει πολλά πλεονεκτήματα εκτώς του οτι οταν βγεις απο το array καταλαθος καταλαβαινεις οτι εκανες λαθος γλυτώνοντας σε απο 3 μερες debugging μεχρι να βρεις γιατι σε μισει τοσο το pc σου. Σε αφήνει να κανεις πολλά ωραία πράγματα του τύπου "στειλε την ταδε ρουτίνα στον αλλο επεξεργαστή για εκτελεση" η "κανε recompile το πρόγραμμα την ώρα που τρέχει χρησιμοποιόντας στατιστικα απο το μεχρι τώρα τρέξιμο του για να το κανεις να πηγαινει πιο γρηγορα".
Assembly:
Γραφεις κατ ευθειαν στη μνήμη. Αμα θες κανεις και φλωριες τυπου define ARRAY1 0x00FF και απο τοτε και στο εξής μπορεις να γραφεις ARRAY1 αντι για 0x00FF. Αμα πας και γραψεις πανω στη αλλη μεταβλητη σου προβλημα σου

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
gademis
Τιμώμενο Μέλος


Αναλογα με ποια C εχεις στη C εχει η τα προηγούμενα που ειχε η μεταβλητη που ηταν σε αυτη την περιοχή της μνημης, η μια ασχετη τιμη. Στις αλλες γλώσσες εχει μια συγκεκριμένη άσχετη τιμή που ειναι ορισμένη σαν NULL (η κατι αναλογο), για να μπορεις να πεις πραγματα του τυπου if (A==NULL) και να ελεγχεις αν εχει αρχικοποιηθει κατι. Στις συγχρονες γλώσσες θα σου βγαλει τουλαχιστον ενα warning αν πας να κανεις πράξη με τετοια μεταβλητη.
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
iJohnnyCash
e-steki.gr Founder


Παντως ευχαριστω πολυ ... εμαθα οχι ακριβως αυτο που ηθελα αλλα και πολυ παρα πανω
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Demelene
Διάσημο μέλος


Μπορείς να γίνεις πιο συγκεκριμένος?Με απλα λογια υπαρχει περιπτωση μια μεταβλητη χωρις τιμη να παει να πεσει σε κελη του symbol table που υπαρχει καποια τιμη;
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
gademis
Τιμώμενο Μέλος


Εχεις ενα προγραμμα που κανειΑρχική Δημοσίευση από Demelene:Μπορείς να γίνεις πιο συγκεκριμένος?
int A;
if (A==7) printf("Lalala");
else A=7;
Το κανεις compile και το pc παει και αντιστοιχει την Α στη θεση μνήμης 0x2310521010, που αρχικα τυχαινει και εχει μεσα 42.
Τρέχεις μια φορα το πρόγραμμα, κανει Α=7 αυτο.
Τη δευτερη φορα, η θέση μνήμης μπορεί να έχει παραμείνει με την τιμή 7 μεσα, οποτε θα σου γράψει Lalala.
Σε C και επι dos που δεν εχει virtual address spaces ολα αυτα. Ευτυχως τα συγκρονα λειτουργικα και γλώσσες μας εχουν γλυτώσει απο αυτο το αναθεμα. Σκευτειτε να ξεχνάτε να αρχικοποιείτε τις μεταβλητες και αυτες να έχουν τις σωστές τιμες απο προηγούμενο run ποσο δυσκολευει το debugging.
PS: Οποιος βρει σε ποια εκπομπή κανω reference στο post αυτο κερδιζει

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Demelene
Διάσημο μέλος


Και μια ένσταση για αυτό που έγραψες που σίγουρα ξέρεις αλλά μπορεί ο φίλος να μην ξέρει. Η τιμή 7 παραμένει αν τύχει και δεν χρησιμοποιηθεί!
Εγώ ακόμα δεν έχω καταλάβει τι ρωτά το παλικάρι στην ερώτηση
Με απλα λογια υπαρχει περιπτωση μια μεταβλητη χωρις τιμη να παει να πεσει σε κελη του symbol table που υπαρχει καποια τιμη;
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
iJohnnyCash
e-steki.gr Founder


Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
gademis
Τιμώμενο Μέλος


στη θεση μνήμης 0x2310521010
...
PS: Οποιος βρει σε ποια εκπομπή κανω reference στο post αυτο κερδιζει
Κοβεστε ολοι στο Λιακοπουλο
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
iJohnnyCash
e-steki.gr Founder


Πειραζεί που δεν κατάλαβα τίποτα;Αρχική Δημοσίευση από gademis:Κοβεστε ολοι στο Λιακοπουλο

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
gademis
Τιμώμενο Μέλος



Την υποψία μου οτι μπορει να μην εχεις δει Λιακοπουλο την προσπερναω.. δεν υπαρχει περιπτωση.
Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Χρήστες Βρείτε παρόμοια
-
Φορτώνει...
-
Το forum μας χρησιμοποιεί cookies για να βελτιστοποιήσει την εμπειρία σας.
Συνεχίζοντας την περιήγησή σας, συναινείτε στη χρήση cookies στον περιηγητή σας.