Καταχωρητής: Διαφορά μεταξύ των αναθεωρήσεων

Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
Χωρίς σύνοψη επεξεργασίας
Χωρίς σύνοψη επεξεργασίας
Γραμμή 4:
 
Η μνήμη ενός ηλεκτρονικού υπολογιστή μπορεί να διαταχθεί σε μορφή πυραμίδας. Τα κατώτερα στρώματα της πυραμίδας προσφέρουν μεγαλύτερη αλλά πιο αργή μνήμη. Αντιθέτως, τα ανώτερα στρώματα της πυραμίδας προσφέρουν μικρότερη μνήμη, η οποία είναι πολύ πιο γρήγορη, αλλά και ακριβότερη. Το κατώτατο στρώμα της πυραμίδας είναι οι μαγνητικές ταινίες και ανεβαίνοντας προς τα πάνω συναντά κανείς τους USB Flash δίσκους, τα [[CD|CD-ROM]] ή [[DVD|DVD-ROM]], τους [[Σκληρός Δίσκος|σκληρούς δίσκους]], την κύρια μνήμη [[Μνήμη τυχαίας προσπέλασης|RAM]], την μνήμη [[Κρυφή μνήμη ΚΜΕ|L3 / L2 / L1 Cache]] του επεξεργαστή και τέλος τους καταχωρητές. Άρα λοιπόν οι καταχωρητές βρίσκονται στην κορυφή της πυραμίδας και προσφέρουν την πιο γρήγορη μνήμη που υπάρχει. Δυστυχώς όμως το μέγεθος της μνήμης αυτής είναι πολύ μικρό και περιορισμένο.
 
Οι προγραμματιστές μπορούν να επηρεάσουν σημαντικά την ταχύτητα εκτέλεσης του προγράμματός τους εάν επιλέξουν να τοποθετήσουν στους καταχωρητές τις μεταβλητές που χρησιμοποιούνται συχνά στο πρόγραμμα. Η επιλογή αυτή γίνεται για παράδειγμα στην [[C++]] εάν πριν από το όνομα και τον τύπο της μεταβλητής χρησιμοποιηθεί η δεσμευμένη λέξη ''register''. Σημεία του προγράμματος που μπορεί να επιτευχθεί σημαντική βελτίωση είναι βρόχοι for που χρειάζεται να εκτελεστούν πολλές φορές. Ως παράδειγμα παρατίθεται ο παρακάτω κώδικας σε C++:
 
<source lang="cpp">
#include <iostream>
int main()
for (int i=0; i<5000; i++)
{
cout << i << endl;
}
return 0;
</source>
 
Το παραπάνω πρόγραμμα τυπώνει τους αριθμούς από το 0 έως το 4999. Η ταχύτητα του προγράμματος μπορεί να βελτιωθεί λίγο εάν ο προγραμματιστής επιλέξει να αποθηκεύσει την μεταβλητή i σε έναν καταχωρητή. Η επιλογή αυτή είναι πολύ καλή, δεδομένου ότι η μεταβλητή i θα χρειαστεί να διαβαστεί και γραφεί 5000 φορές. Κατά συνέπεια ο παρακάτω κώδικας είναι μία βελτίωση του προηγούμενου.
 
<source lang="cpp">
#include <iostream>
int main()
for (register int i=0; i<5000; i++)
{
cout << i << endl;
}
return 0;
</source>
 
== Παραδείγματα ==
Γραμμή 65 ⟶ 35 :
|[[MOS Technology 6502|6502]]||3||0
|}
 
== Η δήλωση register στη C ==
 
Οι προγραμματιστές μπορούν να επηρεάσουν σημαντικά την ταχύτητα εκτέλεσης του προγράμματός τους εάν επιλέξουν να τοποθετήσουν στους καταχωρητές τις μεταβλητές που χρησιμοποιούνται συχνά στο πρόγραμμα. Η επιλογή αυτή γίνεται για παράδειγμα στηνστη [[C++ (γλώσσα προγραμματισμού)|C]] εάν πριν από το όνομα και τον τύπο της μεταβλητής χρησιμοποιηθεί η δεσμευμένη λέξη ''register''. Σημεία του προγράμματος που μπορεί να επιτευχθεί σημαντική βελτίωση είναι βρόχοι for που χρειάζεται να εκτελεστούν πολλές φορές. Ως παράδειγμα παρατίθεται ο παρακάτω κώδικας σε C++:
 
<source lang="cppc">
#include <iostreamstdio.h>
int main()
for (int i=0; i<5000; i++)
{
printf("%d\n", i);
}
return 0;
</source>
 
Το παραπάνω πρόγραμμα τυπώνει τους αριθμούς από το 0 έως το 4999. Η ταχύτητα του προγράμματος μπορεί να βελτιωθεί λίγο εάν ο προγραμματιστής επιλέξει να αποθηκεύσει την μεταβλητή i σε έναν καταχωρητή. Η επιλογή αυτή είναι πολύ καλή, δεδομένου ότι η μεταβλητή i θα χρειαστεί να διαβαστεί και γραφεί 5000 φορές. Κατά συνέπεια ο παρακάτω κώδικας είναι μία βελτίωση του προηγούμενου.
 
<source lang="cppc">
#include <iostreamstdio.h>
int main()
for (register int i=0; i<5000; i++)
{
printf("%d\n", i);
}
return 0;
</source>
 
Στην πράξη οι σύγχρονοι μεταγλωττιστές της C διαθέτουν εξελιγμένους αλγόριθμους δέσμευσης των καταχωρητών (register allocation) που συνήθως μπορούν να βρουν καλύτερα από τον προγραμματιστή ποιες μεταβλητές πρέπει να κρατιούνται σε καταχωρητές. Έτσι πολλοί μεταγλωττιστές της C είτε αγνοούν τη δήλωση register, είτε τη θεωρούν απλά κάποια επιπλέον πληροφορία που μπορεί να λάβει υπόψη του ο αλγόριθμος δέσμευσης καταχωρητών.
 
== Δείτε επίσης ==