Προς το περιεχόμενο

Προσομοίωση μνήμης σε C/C++


emperor318

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σας!

 

Λοιπόν, φτιάχνω ένα ομοίωμα μνήμης 1024 λέξεων, των 20 bits η καθεμία.

 

Οπότε χρειάζομαι έναν τύπο δεδομένων (τ.δ.) για τα bits, ώστε να φτιάξω μία λέξη έτσι:

>binDigit binWord[20]

κι έναν για τη λέξη, ώστε να φτιάξω τη μνήμη έτσι:

>binWord memory[1024]

 

Είπα να ρωτήσω πριν μπλέξω με σύνθετους τύπους κλπ...

Δημοσ.

Όντως δε χρειάζεται να γίνει με σύνθετους τύπους.

Γίνεται με typedef και με χρήση bitwise τελεστών.

Θέλει βέβαια λίγη προσοχή με το endianness!

 

Ξεκαθάρισε από την αρχή πως θα το δουλέψεις, για να προσέχεις μετά στο διάβασμα/πράξεις/τύπωμα.

Εύκολα μπορεί ας πούμε να τα κάνεις όλα σωστά,

αλλά επειδή δεν τα τυπώνεις όπως πρέπει να νομίζεις

ότι βγάζεις λάθος αποτελέσματα!

Δημοσ.

Κόιταξε να δείς, εσύ χρειάζεσαι 20bit λέξεις. Οπότε

οτιδήποτε χωράει 20bit σου κάνει. Κατά πάσα πιθανότητα, στο σύστημα που χρησιμοποιείς ο integer είναι 32bit. Θα μπορούσες λοιπόν να πεις

 

typedef int binWord;

 

Μετά από αυτό το μόνο που έχει να κάνεις είναι να

προσέχεις στις πράξεις που θα κάνεις να μην ξεπερνάς

τα 20bit. Αν φτιάξεις μια μάσκα 0x000FFFFF και την

κάνεις & με οποιονδήποτε integer θα κρατήσεις την

πληροφορία που περιέχεται στα πρώτα 20bit. Έτσι, θα

το υλοποιήσεις πολύ απλά.

 

Στη συνέχεια. η μνήμη μπορεί να είναι ένας πίνακας

από binWord (δλδ int). Οπότε θα είναι πάλι εύκολο να το

δουλεύεις.

 

Μπορώ να φτιάξω και κάποιο κομμάτι κώδικα αν θες.

Τα λέμε!

Δημοσ.

Α, έτσι ναι, απλά σκεφτόμουν πως ίσως έπρεπε να παίρνουν τα ψηφία μόνο τις τιμές 0 ή 1. Με enum ας πούμε:

>enum {0,1} binDigit

Αλλά ίσως δε χρειάζεται.

 

Τέλος πάντων, θα δοκιμάσω και θα δω...ευχαριστώ!

Δημοσ.

Αυτές τις τιμές θα παίρνουν. Δε θα δίνεις σημασία στον int

σαν μία τιμή, αλλά στις τιμές των ξεχωριστών bit που τον

αποτελούν. Νομίζω ότι έτσι θα το υλοποιήσεις έυκολα γιατί

μπορείς να εκμεταλλευτείς και τους ήδη υπάρχοντες bitwise

τελεστές.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...