PDA

View Full Version : C Specific: 32-to-64 bits transition misalignments.


DarthMoul
02-08-2004, 13:14
Για κοιτάξτε λιγάκι την παρακάτω δήλωση:

int i, *ip;

Οι μεταβλητές τύπου int έχουν μέγεθος 4 bytes. Όλοι οι pointers ανεξαρτήτως τύπου 4 bytes. Όλα μια χαρούλα. Κανένα misalignment.
Ας δούμε όμως λιγάκι το manual του compiler. Είναι το manual του gcc αλλά το ίδιο ισχύει και για τον msc και για τον icc:

-m64
Generate code for a 32-bit or 64-bit environment. The
32-bit environment sets int, long and pointer to 32
bits and generates code that runs on any i386 system.
The 64-bit environment sets int to 32 bits and long
and pointer to 64 bits and generates code for AMD's
x86-64 architecture.

Όταν θα χρειαστεί να κάνουμε compilation για x86-64 αρχιτεκτονική, την πατήσαμε. Η μεταβλητή i έχει μέγεθος 4 bytes, αλλά ο pointer 8 bytes. Θα εισπράξουμε ένα πολύ όμορφο misalignment. Για να αποφύγουμε την παγίδα, θα πρέπει όλοι οι pointers ανεξαρτήτως τύπου, να δηλωθούν πριν από τους long. Αυτό θα μαs καλύψει ακόμα και στην περίπτωση που ο κώδικας μας τρέξει σε 128bits πλατφόρμα. Μην γελάτε. Υπάρχουν από χρόνια 128 bits CPUs. Πάμε να δούμε ένα παράδειγμα δηλώσεων ώστε να μην ταλαιπωρηθούμε από την έλευση των 64 bits.

long double ld;
double d;
char *cp;
int *ip ;
long *lp ;
double *dp;
long l;
int i ;
char c ;

DVD_GR
02-08-2004, 13:19
μας βλεπω εμας που δεν μ@μ@με στον προγραμματισμο να ζοριζομαστε αρκετα....

DarthMoul
02-08-2004, 13:21
μας βλεπω εμας που δεν μ@μ@με στον προγραμματισμο να ζοριζομαστε αρκετα....
Πάντως υπάρχει τρόπος για να μάθετε να μ@μ@τε

RTFM

Και εγώ αυτό κάνω όλη μου την ζωή.

john_dr
02-08-2004, 14:24
Το μόνο κακό στον προγραμματισμό είναι αυτό:
RTFM again and again and again.....διότι όλα αλλάζουνε και όλα τα ίδια μένουν.....

DarthMoul
02-08-2004, 14:30
Το μόνο κακό στον προγραμματισμό είναι αυτό:
RTFM again and again and again.....διότι όλα αλλάζουνε και όλα τα ίδια μένουν.....
Έρχεται και η εμπειρία όμως που κάνει τα πράγματα ευκολότερα. Εγώ σ'αυτό που γράφω παραπάνω, την είχα πατήσει το 95 που έκανα port προγράμματα από pc σε alpha. Με είχε τρελλάνει στο μήνυμα, δεν ήξερα από που να μαζέψω τα misalignments. Τώρα δεν χρειάστηκε καν να διαβάσω manual. To έβαλα για να το δουν τα παιδιά.

DVD_GR
02-08-2004, 15:06
πιστεψε με εχω περασει πολλες ωρες πανω σε προγραμματισμο...και το επιπεδο σου ειναι μιλια μπροστα απο το δικο μου κ ας καποιο ελεγχο σε υψηλο επιπεδο στη vb,απο c δεν ξερω αλλα παντα κατι με ζοριζε και τα παρατουσα............

DarthMoul
02-08-2004, 16:35
πιστεψε με εχω περασει πολλες ωρες πανω σε προγραμματισμο...και το επιπεδο σου ειναι μιλια μπροστα απο το δικο μου κ ας καποιο ελεγχο σε υψηλο επιπεδο στη vb,απο c δεν ξερω αλλα παντα κατι με ζοριζε και τα παρατουσα............
Μ'αυτό που είπες έδειξες και τον δρόμο για να ανεβάσεις το δικό σου επίπεδο. Χωρίς να αφήσεις την VB, πιάσε και την C. Αν είναι σε Linux ακόμα καλύτερα. Θα μάθεις πως δουλεύει το pc καλύτερα και από την παλάμη σου.

DVD_GR
02-08-2004, 23:10
την εχω πιασει λιγο στο linux με <<πονηρους>> στοχους....χρονος λιγος ομως...τεσπα αν χρειαστω βοηθεια ξερω μαλλον ποιον θα ρωτησω!!!!