Πώς να εκτελέσετε ένα πρόγραμμα 32 bit σε 64 windows 7

Τα περισσότερα σύγχρονα παιχνίδια όπως το Overwatch, το Hurtworld ή το Subnautica μπορούν να τρέξουν μόνο σε λειτουργικά συστήματα 64-bit. Απλώς δεν είναι κερδοφόρο για τους δημιουργούς αυτών των προγραμμάτων να κάνουν διαφορετικές εκδόσεις εφαρμογών για 32- και 64-bit. Αν και και οι δύο εκδόσεις είναι αρκετά κοινές. Φυσικά, η μετάβαση στο x64 είναι αρκετά εύκολη. Τι γίνεται όμως αν δεν πρόκειται να αλλάξετε το λειτουργικό σύστημα και εξακολουθείτε να θέλετε να παρακολουθήσετε ένα δημοφιλές παιχνίδι; Μάθετε πώς να εκτελείτε το Subnautica και άλλα προγράμματα 64-bit σε ένα σύστημα 32-bit.

Για να γίνει αυτό, ο υπολογιστής πρέπει να πληροί τις απαραίτητες απαιτήσεις για την κανονική λειτουργία της εφαρμογής. Ο επεξεργαστής πρέπει αρχικά να έχει αρχιτεκτονική x64.

Ποια είναι η διαφορά μεταξύ ενός συστήματος 32-bit και ενός συστήματος 64-bit;

Γιατί τα προγράμματα που έχουν σχεδιαστεί για 64 bit δεν μπορούν να ανοίξουν σε 32 bit; Γιατί αυτές οι εκδόσεις είναι τόσο διαφορετικές, αφού δεν εκτελούν τις ίδιες εφαρμογές; Και αν το Overwatch μπορεί να παιχτεί σε x64, γιατί δεν μπορεί να παιχτεί στον ίδιο υπολογιστή, αλλά με x32;

Εξαρτάται από το σύστημα πόση μνήμη RAM μπορεί να εγκατασταθεί στον υπολογιστή και πόση μπορεί να διαθέσει σε κάθε συγκεκριμένη εφαρμογή. Σε x64, η μέγιστη ποσότητα μνήμης RAM είναι 16 GB (στα Windows 7 Professional - έως 192 GB). Σε αυτήν την περίπτωση, οποιοδήποτε βοηθητικό πρόγραμμα παρέχεται με έως και 4 GB. Στην έκδοση x32, οι αριθμοί που υποδεικνύονται είναι πολύ μικρότεροι - 4 GB το μέγιστο και 2 GB για ξεχωριστό πρόγραμμα.

Η χωρητικότητα του επεξεργαστή καθορίζει τον τρόπο με τον οποίο επεξεργάζεται τις πληροφορίες. Αυτό επηρεάζει σημαντικά την απόδοση - είναι πολύ καλύτερα στα 64 bit. Υπάρχει ένας μεγαλύτερος καταχωρητής για την αποθήκευση δεδομένων και το φορτίο κατανέμεται σε όλους τους πυρήνες ταυτόχρονα. Και σε ένα λειτουργικό σύστημα 32-bit, ο δεύτερος πυρήνας ενεργοποιείται όταν ο πρώτος είναι πλήρως κατειλημμένος.

Σε «αδύναμα» μηχανήματα εγκαταστήστε το x32. Εάν ο υπολογιστής σας δεν έχει πολλή μνήμη RAM και δεν έχει τον καλύτερο επεξεργαστή, απλά δεν έχει νόημα να τρέχετε 64 bit. Αυτό θα «υπερφορτώσει» μόνο τον ηλεκτρονικό υπολογιστή χωρίς να προσθέσει παραγωγικότητα σε αυτόν. Αλλά ένας ισχυρός υπολογιστής x64 θα είναι ο σωστός.

Αν και αυτά τα συστήματα είναι επιφανειακά παρόμοια μεταξύ τους, είναι πολύ διαφορετικά σε επίπεδο λογισμικού. Έχουν διαφορετικό σύνολο προγραμμάτων οδήγησης, επομένως τα Subnautica, Overwatch, Hurtworld και άλλα παρόμοια δεν θα τρέχουν σε λειτουργικό σύστημα 32-bit, ακόμα κι αν ο υπολογιστής έχει τα απαραίτητα χαρακτηριστικά.

Για σύγχρονα παιχνίδια, εφαρμογές, γραφικά ή προγράμματα επεξεργασίας βίντεο, τα 2 GB που τους διαθέτει το x32 δεν είναι αρκετά. Οι συνθέτες νέων παιχνιδιών δημιουργούν τα προϊόντα τους ειδικά για x64.

Πώς να μάθετε εάν ένας επεξεργαστής υποστηρίζει x64;

Μπορείτε να δείτε ποιο λειτουργικό σύστημα έχετε εγκαταστήσει ως εξής:

  1. Στην επιφάνεια εργασίας σας, κάντε δεξί κλικ στο εικονίδιο "Ο Υπολογιστής μου".
  2. Στοιχείο "Ιδιότητες". Μπορεί επίσης να βρεθεί στην ενότητα Πίνακας Ελέγχου.
  3. Η γραμμή "Τύπος" θα υποδείξει πόσα bit υπάρχουν στην έκδοση του λειτουργικού σας συστήματος.

Πρώτα πρέπει να καταλάβετε σε ποιο σύστημα εργάζεστε.

Προτού εκτελέσετε το Overwatch σε σύστημα 32-bit, μάθετε αν ο υπολογιστής σας μπορεί να χειριστεί το παιχνίδι. Ελέγξτε εάν ο επεξεργαστής υποστηρίζει οδηγίες 64-bit. Αυτό μπορεί να γίνει χρησιμοποιώντας ειδικά προγράμματα δοκιμών. Για παράδειγμα, το δωρεάν βοηθητικό πρόγραμμα "SecurAble" είναι κατάλληλο. Δεν χρειάζεται να εγκατασταθεί. Και, κατά συνέπεια, δεν χρειάζεται να το αφαιρέσετε μετά τη χρήση. Απλώς εκτελέστε το εκτελέσιμο αρχείο. Θα εμφανιστούν πληροφορίες σχετικά με τον επεξεργαστή: όνομα, ταχύτητα ρολογιού, βάθος bit, αν υποστηρίζει D.E.P (αυτό προστατεύει τη συσκευή από υπερχείλιση buffer) και οπτικοποίηση υλικού. Μπορείτε να κάνετε κλικ σε οποιοδήποτε από τα αποτελέσματα και θα εμφανιστεί η περιγραφή του.

Έλεγχος υποστήριξης επεξεργαστή για εντολές 64-bit

Εάν το πρόγραμμα επιστρέψει μια ετυμηγορία "Μέγιστο 32 bit", σημαίνει ότι οι εφαρμογές που έχουν σχεδιαστεί για x64 είναι απίθανο να λειτουργήσουν. Για να παίξετε Overwatch ή Hurtword, θα πρέπει να αλλάξετε τον επεξεργαστή ή να απορρίψετε απομακρυσμένους διακομιστές.

Πώς να μετατρέψετε ένα σύστημα 32 bit σε 64 bit;

Υπάρχουν πολλά βοηθητικά προγράμματα για τη λεγόμενη εικονικοποίηση. Μιμούνται τη λειτουργία μιας πλατφόρμας με συγκεκριμένο λογισμικό και υλικό. Εάν πρέπει να μάθετε πώς να εκτελείτε το Hurtworld σε ένα σύστημα 32-bit, χρησιμοποιήστε ένα από αυτά τα βοηθητικά προγράμματα.

Αυτά τα προγράμματα δημιουργούν ένα είδος λειτουργικού συστήματος "επισκέπτης". Πρέπει όμως να το εγκαταστήσετε σε κάθε περίπτωση και να αγοράσετε μια έκδοση με άδεια χρήσης εάν είναι πληρωμένη. Για να το κάνετε αυτό, πρέπει να έχετε έναν δίσκο (ή εικόνα δίσκου) με το λειτουργικό σύστημα που χρειάζεστε.

Oracle VirtualBox

Ένα καθολικό πρόγραμμα για παρόμοιες εργασίες.

  1. Εγκαταστήστε το και εκτελέστε το. Στα αριστερά θα υπάρχει μια λίστα με τα εγκατεστημένα λειτουργικά συστήματα και μια γραμμή εργαλείων. Στα δεξιά υπάρχουν πληροφορίες για το επιλεγμένο σύστημα.
  2. Κάντε κλικ στο κουμπί "Δημιουργία". Θα εμφανιστεί ένα παράθυρο πληροφοριών. Κάντε κλικ στο "Επόμενο".
  3. Επιλέξτε τύπο και έκδοση λειτουργικού συστήματος. Υπάρχουν πολλές επιλογές για να διαλέξετε: όχι μόνο Microsoft Windows, αλλά και Linux.
  4. Στη συνέχεια, θα πρέπει να αποφασίσετε πόση μνήμη RAM θα ​​διαθέσετε στο σύστημα "επισκέπτης".
  5. Μετά από αυτό, πρέπει να δημιουργήσετε έναν εικονικό δίσκο (στον οποίο θα εγγραφούν τα αρχεία του λειτουργικού συστήματος). Μπορείτε να επιλέξετε ένα υπάρχον ή να φτιάξετε ένα νέο. Και επιλέξτε το πλαίσιο δίπλα στην επιλογή "Δίσκος εκκίνησης".
  6. Στο επόμενο παράθυρο, επιλέξτε εάν η χωρητικότητα του δίσκου θα είναι σταθερή ή δυναμική (μεταβαλλόμενη). Υπάρχουν λεπτομερείς εξηγήσεις για κάθε στοιχείο. Είναι καλύτερα να φτιάξετε τη μπότα μία σταθερή. Μπορείτε να προσθέσετε περισσότερες μονάδες δίσκου αργότερα.
  7. Διαμορφώστε το μέγεθος εικονικής αποθήκευσης. Συνήθως 10 GB είναι αρκετά. Είναι καλύτερα να το δημιουργήσετε σε ξεχωριστό μέρος - όχι στο ίδιο μέρος όπου είναι εγκατεστημένο το κύριο σύστημα.
  8. Περιμένετε να ολοκληρωθεί η διαδικασία. Ένα νέο θα εμφανιστεί στη λίστα με τα διαθέσιμα.

Ένας τρόπος είναι να χρησιμοποιήσετε βοηθητικά προγράμματα εικονικοποίησης

Στη συνέχεια, μπορείτε να διαμορφώσετε το υλικό:

  1. Επιλέξτε το Guest OS και κάντε κλικ στο Properties.
  2. Στην ενότητα Γενικά - Για προχωρημένους, αλλάξτε το φάκελο για την αποθήκευση φωτογραφιών σε αυτόν που σας ταιριάζει.
  3. Ρυθμίστε το πρόχειρο εκεί. Καθορίζει τον τρόπο μεταφοράς πληροφοριών μεταξύ διαφορετικών λειτουργικών συστημάτων.
  4. Στην καρτέλα «Σύστημα», μπορείτε να επιλέξετε τα χαρακτηριστικά της εικονικής μητρικής πλακέτας και του επεξεργαστή.
  5. Το στοιχείο "Δίκτυο" απαιτείται για τη διαμόρφωση της πρόσβασης στον Παγκόσμιο Ιστό. Μπορείτε να αφήσετε τις προεπιλεγμένες ρυθμίσεις.
  6. Στην ενότητα "Μέσα", υποδείξτε από πού θέλετε να λάβετε το λειτουργικό σύστημα. Εάν το πρόγραμμα εγκατάστασης βρίσκεται σε CD, τοποθετήστε το στη μονάδα σας. Για λήψη από το .ISO, κάντε κλικ στο κουμπί "Άνοιγμα" δίπλα στη λίστα "Drive". Μοιάζει με κίτρινο φάκελο.
  7. Μπορείτε επίσης να προσθέσετε άλλες εικόνες εκεί για γρήγορη εναλλαγή μεταξύ τους: βάσεις δεδομένων, εφαρμογές, παιχνίδια.

Αφού ολοκληρώσετε τις ρυθμίσεις, κάντε κλικ στο "OK". Για να ξεκινήσετε το λειτουργικό σύστημα επισκέπτη, κάντε κλικ σε αυτό και στο κουμπί "Έναρξη". Η εγκατάσταση θα προχωρήσει. Και μπορείτε να κάνετε εναλλαγή μεταξύ συστημάτων: αναπαραγωγή σε 64-bit και εργασία σε 32-bit.

Άλλες εικονικές μηχανές

Υπάρχουν επίσης βοηθητικά προγράμματα για την εργασία με εικονικές μηχανές:

  • Σταθμός εργασίας VMware. Ένα σοβαρό επαγγελματικό πρόγραμμα για πολύπλοκες εργασίες. Διανέμεται επί πληρωμή.
  • Ένα απλό βοηθητικό πρόγραμμα για εξομοίωση υλικού. Είναι ανοιχτού κώδικα.
  • Windows Virtual PC. Λειτουργεί μόνο με συστήματα Windows. Μπορείτε να διαμορφώσετε την προτεραιότητα των διεργασιών - με αυτόν τον τρόπο οι πόροι θα διατίθενται αυτόματα στο ηλεκτρονικό μηχάνημα εάν εκτελεί μια συγκεκριμένη εργασία.
  • Virt-Manager. Παρέχει άφθονες ευκαιρίες για την προσαρμογή του στοιχείου υλικού - το εικονικό υλικό είναι διαθέσιμο για κάθε γούστο.

Cloud computing (απομακρυσμένοι διακομιστές)

Εάν η απόδοση εξακολουθεί να μην είναι αρκετή για να τρέξει το παιχνίδι, μπορείτε να το κάνετε σε έναν απομακρυσμένο διακομιστή. Όλοι οι υπολογισμοί, όλες οι πληροφορίες θα υποβληθούν σε επεξεργασία σε αυτό. Με αυτόν τον τρόπο δεν θα σας εμποδίσει κανένας περιορισμός που σχετίζεται με το x32. Άλλωστε, στην ουσία, οι εφαρμογές θα «ανοίγουν» σε κατάλληλα συστήματα. Απλά όχι στον υπολογιστή σας.

Το πρόγραμμα Microsoft Azure είναι κατάλληλο για αυτό. Με τη βοήθειά του, μπορείτε να δημιουργήσετε πολλά λειτουργικά συστήματα για διαφορετικούς σκοπούς. Οι λάτρεις των παιχνιδιών θα βρουν επίσης χρήσιμη την εξειδικευμένη υπηρεσία εικονικοποίησης καρτών γραφικών NVIDIA GRID. Αυτά τα βοηθητικά προγράμματα απαιτούν Internet υψηλής ταχύτητας.

Οι υπερσύγχρονες υπηρεσίες cloud διευρύνουν τις δυνατότητές μας

Η εργασία με εφαρμογές 64 bit σε σύστημα 32 bit είναι αρκετά δυνατή. Αλλά πρέπει να εγκαταστήσετε πρόσθετο λογισμικό ή, γενικά, να μεταβείτε σε έναν απομακρυσμένο διακομιστή. Αυτό είναι αρκετά δύσκολο να γίνει. Εάν θέλετε να παίξετε πλήρως Overwatch, Hurtword και άλλα δημοφιλή παιχνίδια, είναι προτιμότερο να εγκαταστήσετε το x64 OS. Έτσι δεν θα υπάρχουν προβλήματα συμβατότητας. Και δεν θα χρειαστεί να ρυθμίσετε τίποτα.

NastroyVse.ru

windows x64 - Γιατί υπάρχουν ακόμα τόσα πολλά προγράμματα 32-bit;

Ο υπολογιστής σας πιθανότατα εκτελεί μια έκδοση 64-bit των Windows. Αλλά αν ανοίξετε τη Διαχείριση εργασιών, θα δείτε ότι τα περισσότερα από τα προγράμματα στο σύστημά σας εξακολουθούν να είναι 32-bit. Είναι όντως αυτό πρόβλημα; Υπάρχουν πολλές διαφορές μεταξύ των εκδόσεων 64-bit και 32-bit των Windows. Οι εκδόσεις 64 bit των Windows μπορούν να εκτελούν λογισμικό 32 bit, αλλά οι εκδόσεις 32 bit των Windows δεν μπορούν να εκτελούν λογισμικό 64 bit.

Πώς να μάθετε το βάθος bit ενός προγράμματος;

Ας χρησιμοποιήσουμε τη Διαχείριση εργασιών για να δούμε ποια από τα προγράμματά σας είναι 64-bit και ποια είναι 32-bit. Κάντε δεξί κλικ στη γραμμή εργασιών και επιλέξτε Διαχείριση εργασιών ή πατήστε Ctrl + Shift + Esc για να την ανοίξετε. Κοιτάξτε τη στήλη με τα ονόματα διεργασιών. Εάν χρησιμοποιείτε την έκδοση 64-bit των Windows 8.1 ή 8, θα δείτε τη λέξη "(32-bit)" μετά από κάθε έκδοση 32-bit του ονόματος του προγράμματος. Εάν χρησιμοποιείτε την έκδοση 64-bit των Windows 7, θα δείτε το "*32". Τα προγράμματα 32-bit εγκαθίστανται συνήθως στο φάκελο C:\Program Files (x86)\ σε εκδόσεις 64-bit των Windows, ενώ τα προγράμματα 64-bit εγκαθίστανται συνήθως στο φάκελο C:\Program Files\. Είναι απλώς ένας κανόνας. Κανείς όμως δεν λέει ότι δεν υπάρχει άλλος κανόνας που να απαγορεύει την εγκατάσταση προγραμμάτων 64-bit στο φάκελο C:\Program Files (x86)\. Για παράδειγμα, το Steam είναι ένα πρόγραμμα 32-bit, επομένως εγκαθίσταται στο "C:\Program Files (x86)\" από προεπιλογή. Τα παιχνίδια που εγκαθιστάτε στο Steam είναι εγκατεστημένα στο φάκελο C:\Program Files (x86)\Steam από προεπιλογή, συμπεριλαμβανομένου. ακόμη και εκδόσεις παιχνιδιών 64 bit. Εάν συγκρίνετε δύο διαφορετικούς φακέλους Program Files, θα διαπιστώσετε ότι τα περισσότερα από τα προγράμματά σας είναι πιθανότατα εγκατεστημένα στο φάκελο C:\Program Files (x86). Και, αυτά τα προγράμματα είναι ως επί το πλείστον 32-bit.

Εκτέλεση λογισμικού 32 bit σε λειτουργικό σύστημα 64 bit

Με την πρώτη ματιά, φαίνεται τρομερό το γεγονός ότι τα περισσότερα από τα προγράμματα των Windows δεν χρησιμοποιούν την αρχιτεκτονική του λειτουργικού συστήματος 64-bit. Ίσως πιστεύετε ότι υπάρχει ποινή απόδοσης για την εκτέλεση προγραμμάτων 32 bit σε λειτουργικό σύστημα 64 bit, αλλά αυτό δεν συμβαίνει. Τα Windows εκτελούν προγράμματα 32 bit μέσω του επιπέδου συμβατότητας WoW64 σε εκδόσεις 64 bit των Windows. Ωστόσο, οι επεξεργαστές Intel και AMD 64 bit είναι συμβατοί προς τα πίσω και μπορούν να εκτελούν απευθείας λογισμικό 32 bit. Όλα τα προγράμματα των Windows 32-bit θα εκτελούνται ακριβώς όπως θα εκτελούνταν σε μια έκδοση 32-bit των Windows. Έτσι, δεν υπάρχει κανένα εμπόδιο στην εκτέλεση αυτών των προγραμμάτων σε λειτουργικό σύστημα 64-bit. Ακόμα κι αν κάθε πρόγραμμα που χρησιμοποιείτε εξακολουθεί να είναι 32-bit, θα ωφεληθείτε επειδή το ίδιο το λειτουργικό σας σύστημα θα λειτουργεί σε λειτουργία 64-bit. Και, η έκδοση 64-bit των Windows είναι πιο ασφαλής.

Προγράμματα 64 bit και προγράμματα 32 bit: ποιο είναι καλύτερο;

Τα προγράμματα 32 bit εκτελούνται χωρίς προβλήματα σε εκδόσεις 64 bit των λειτουργικών συστημάτων Windows. Αλλά θα ήταν καλύτερα όλα τα προγράμματά σας να ήταν 64-bit; Υπάρχουν σίγουρα πλεονεκτήματα στα προγράμματα 64-bit. Τα προγράμματα 32-bit μπορούν να χρησιμοποιήσουν μόνο 2 GB μνήμης, ενώ τα προγράμματα 64-bit μπορούν να χρησιμοποιήσουν πολύ περισσότερα. Εάν ένα πρόγραμμα είναι πιθανό να δεχθεί επίθεση, πρόσθετες δυνατότητες ασφαλείας που εφαρμόζονται σε προγράμματα 64-bit μπορεί να βοηθήσουν. Το Google Chrome είναι επί του παρόντος μια εφαρμογή 32 bit ακόμη και σε εκδόσεις 64 bit του λειτουργικού συστήματος Windows, αλλά έχει ήδη εμφανιστεί μια έκδοση beta 64 bit αυτού του προγράμματος. Και η Google υπόσχεται ότι η έκδοση 64-bit του Chrome θα είναι ταχύτερη, πιο ασφαλής και πιο σταθερή. Ορισμένα προγράμματα προσφέρουν εκδόσεις 64-bit. Για παράδειγμα: Photoshop, iTunes, Microsoft Office και μερικά από τα πιο δημοφιλή προγράμματα Windows και είναι όλα διαθέσιμα σε μορφή 64-bit. Τα τελευταία παιχνίδια είναι επίσης συχνά 64-bit, ώστε να μπορούν να χρησιμοποιούν περισσότερα από 2 GB μνήμης. Πολλά προγράμματα δεν έχουν κάνει τη μετάβαση στα 64-bit και τα περισσότερα δεν θα το κάνουν ποτέ. Μπορείτε ακόμα να εκτελείτε τα περισσότερα προγράμματα Windows 32 bit σήμερα, ακόμη και αυτά που κυκλοφόρησαν πριν από δέκα χρόνια, σε μια έκδοση 64 bit των Windows, ακόμα κι αν οι προγραμματιστές τους τα έχουν ήδη ενημερώσει. Ένας προγραμματιστής που θέλει να παρέχει μια έκδοση 64-bit του προγράμματός του πρέπει να κάνει πολλή επιπλέον δουλειά. Πρέπει να διασφαλίσει ότι ο υπάρχων κώδικας μεταγλωττίζεται και εκτελείται σωστά ως λογισμικό 64-bit. Πρέπει να παρέχει και να υποστηρίζει δύο ξεχωριστές εκδόσεις του προγράμματος, καθώς οι χρήστες που εκτελούν έκδοση 32 bit των Windows δεν μπορούν να χρησιμοποιήσουν την έκδοση 64 bit. Ας πάρουμε ως παράδειγμα το Evernote για επιτραπέζιους υπολογιστές Windows. Ακόμα κι αν κυκλοφορούσαν μια έκδοση 64-bit του Evernote, οι χρήστες πιθανότατα δεν θα παρατηρούσαν καθόλου τη διαφορά. Ένα πρόγραμμα 32-bit μπορεί να τρέξει μια χαρά σε μια έκδοση 64-bit των Windows, και αν δεν υπάρχουν αξιοσημείωτα οφέλη, τότε δεν έχει νόημα να έχετε μια έκδοση 64-bit.

Πού θα βρείτε εφαρμογές 64-bit

Γενικά δεν θα μπορείτε να επιλέξετε μεταξύ των εκδόσεων 32-bit και 64-bit του λογισμικού. Για παράδειγμα, όταν εγκαθιστάτε το iTunes για Windows, ο ιστότοπος της Apple σάς κατευθύνει αυτόματα είτε στην έκδοση 32 bit είτε στην έκδοση 64 bit του προγράμματος εγκατάστασης, ανάλογα με την έκδοση των Windows που διαθέτετε. Κατά την εγκατάσταση του Photoshop για Windows, συνήθως εγκαθίστανται εκτελέσιμα αρχεία 32-bit και 64-bit. Το Photoshop επιλέγει αυτόματα από αυτά. Μερικές φορές μπορεί να δείτε ξεχωριστούς συνδέσμους λήψης για εκδόσεις προγραμμάτων 32-bit και 64-bit, αλλά αυτό δεν είναι τόσο συνηθισμένο. Το σημαντικό δεν είναι να αναζητήσετε εφαρμογές 64-bit, αλλά να βρείτε εφαρμογές που λειτουργούν καλά για εσάς. Για τις περισσότερες εφαρμογές, δεν έχει μεγάλη σημασία αν η έκδοση είναι 64-bit ή 32-bit.

Είναι εύκολο να αναρωτηθεί κανείς γιατί τόσες πολλές εφαρμογές εξακολουθούν να είναι 32-bit όταν ανοίγετε τη διαχείριση εργασιών. Αλλά αυτό δεν είναι πολύ μεγάλο πρόβλημα και να γιατί. Επειδή οι περισσότερες εφαρμογές δεν κερδίζουν τίποτα όταν αλλάζουν σε εκδόσεις προγραμμάτων 64 bit. Ακόμα κι αν οι προγραμματιστές έκαναν όλη τη δουλειά και κυκλοφόρησαν εκδόσεις 64-bit όλων των μικρών εφαρμογών και βοηθητικών προγραμμάτων για επιτραπέζιους υπολογιστές που χρησιμοποιείτε στα Windows, δεν θα μπορούσατε να διακρίνετε τη διαφορά για τις περισσότερες από αυτές.

itchief.ru

7 βήματα για να μεταφέρετε ένα πρόγραμμα σε σύστημα 64-bit

Το άρθρο περιγράφει τα κύρια βήματα για τη διασφάλιση της σωστής μεταφοράς εφαρμογών Windows 32-bit σε συστήματα Windows 64-bit. Αν και το άρθρο απευθύνεται σε προγραμματιστές που χρησιμοποιούν τη γλώσσα C/C++ στο Visual Studio 2005/2008, θα είναι επίσης χρήσιμο και σε άλλους προγραμματιστές που σχεδιάζουν να μεταφέρουν τις εφαρμογές τους σε συστήματα 64-bit. Το άρθρο περιγράφει τα κύρια σημεία που αντιμετωπίζουν οι προγραμματιστές που σχεδιάζουν να μετεγκαταστήσουν προγράμματα 32 bit σε συστήματα 64 bit. Φυσικά, η λίστα των θεμάτων που εξετάζονται δεν είναι πλήρης, αλλά θα ήθελα να ελπίζω ότι με την πάροδο του χρόνου θα προσφερθεί μια διευρυμένη έκδοση αυτού του άρθρου. Ο συγγραφέας θα είναι ευγνώμων για τα σχόλια, τα σχόλια και τις ερωτήσεις που θα βελτιώσουν το περιεχόμενο πληροφοριών αυτού του άρθρου. Στην αρχιτεκτονική υπολογιστών, ο όρος "64-bit" αναφέρεται σε ακέραιους αριθμούς 64-bit και άλλους τύπους δεδομένων που έχουν μέγεθος 64 bit. Τα συστήματα "64 bit" μπορεί να σημαίνουν αρχιτεκτονικές μικροεπεξεργαστή 64 bit (για παράδειγμα, EM64T, IA-64) ή λειτουργικά συστήματα 64 bit (για παράδειγμα, Windows XP Professional x64 Edition). Το AMD64 (γνωστός και ως x86-64, Intel 64, EM64T, x64) είναι μια αρχιτεκτονική μικροεπεξεργαστή 64-bit και αντίστοιχο σύνολο εντολών που αναπτύχθηκε από την AMD. Αυτό το σετ οδηγιών έλαβε άδεια χρήσης από την Intel με το όνομα EM64T (Intel64). Η αρχιτεκτονική AMD64 είναι μια επέκταση της αρχιτεκτονικής x86 με πλήρη συμβατότητα προς τα πίσω. Η αρχιτεκτονική έχει γίνει ευρέως διαδεδομένη ως βάση για προσωπικούς υπολογιστές και σταθμούς εργασίας. Το IA-64 είναι μια αρχιτεκτονική μικροεπεξεργαστή 64-bit που αναπτύχθηκε από κοινού από την Intel και τη Hewlett Packard. Υλοποιήθηκε σε μικροεπεξεργαστές Itanium και Itanium 2. Η αρχιτεκτονική χρησιμοποιείται κυρίως σε διακομιστές πολλαπλών επεξεργαστών και συστήματα συμπλέγματος. Οι AMD64 και IA-64 είναι δύο διαφορετικές αρχιτεκτονικές 64-bit που δεν είναι συμβατές μεταξύ τους. Επομένως, οι προγραμματιστές θα πρέπει να αποφασίσουν αμέσως εάν θα υποστηρίξουν και τις δύο αυτές αρχιτεκτονικές ή μόνο μία. Στις περισσότερες περιπτώσεις, εκτός και αν αναπτύσσετε εξαιρετικά εξειδικευμένο λογισμικό για συστήματα συμπλέγματος ή εφαρμόζετε το δικό σας DBMS υψηλής απόδοσης, τότε πιθανότατα χρειάζεται μόνο να εφαρμόσετε υποστήριξη για την αρχιτεκτονική AMD64, η οποία είναι πολύ πιο διαδεδομένη από το IA-64. Αυτό ισχύει ιδιαίτερα για το λογισμικό για την αγορά προσωπικών υπολογιστών, η οποία είναι σχεδόν 100 τοις εκατό κατειλημμένη από την αρχιτεκτονική AMD64. Περαιτέρω στο άρθρο θα μιλήσουμε μόνο για την αρχιτεκτονική AMD64 (EM64T, x64), καθώς η χρήση της είναι πλέον πιο σημαντική για τους προγραμματιστές λογισμικού εφαρμογών.

Μιλώντας για διάφορες αρχιτεκτονικές, αξίζει να αναφερθεί η έννοια του «Μοντέλου Δεδομένων». Ένα μοντέλο δεδομένων θα πρέπει να γίνει κατανοητό ως μια σχέση μεταξύ των διαστάσεων των τύπων που γίνονται αποδεκτοί στο περιβάλλον ανάπτυξης. Για ένα λειτουργικό σύστημα, μπορεί να υπάρχουν πολλά εργαλεία ανάπτυξης που συμμορφώνονται με διαφορετικά μοντέλα δεδομένων. Συνήθως όμως επικρατεί μόνο ένα μοντέλο, αυτό που ταιριάζει καλύτερα με το περιβάλλον υλικού και λογισμικού. Ένα παράδειγμα είναι το λειτουργικό σύστημα Windows 64-bit, στο οποίο το εγγενές μοντέλο δεδομένων είναι το LLP64. Ωστόσο, για λόγους συμβατότητας, το σύστημα Windows 64-bit υποστηρίζει την εκτέλεση προγραμμάτων 32-bit που εκτελούνται στη λειτουργία μοντέλου δεδομένων ILP32LL. Ο Πίνακας N1 παρέχει πληροφορίες σχετικά με τα κύρια μοντέλα δεδομένων.


Πίνακας N1. Μοντέλα Δεδομένων

Το μοντέλο δεδομένων που χρησιμοποιείται επηρεάζει τη διαδικασία ανάπτυξης εφαρμογών 64-bit, καθώς ο κώδικας προγράμματος πρέπει να λαμβάνει υπόψη το βάθος bit των δεδομένων που χρησιμοποιούνται.

Θα πρέπει να αρχίσετε να κυριαρχείτε σε συστήματα 64 bit με την ερώτηση "Χρειάζεται να ξαναχτίσουμε το έργο μας για ένα σύστημα 64 bit;" Αυτή η ερώτηση πρέπει να απαντηθεί, αλλά όχι βιαστικά, μετά από σκέψη. Από τη μία πλευρά, μπορείτε να μείνετε πίσω από τους ανταγωνιστές σας, αν δεν προσφέρετε εγκαίρως λύσεις 64 bit. Από την άλλη, μπορείτε να χάσετε το χρόνο σας σε μια εφαρμογή 64-bit που δεν θα προσφέρει κανένα ανταγωνιστικό πλεονέκτημα. Παραθέτουμε τους κύριους παράγοντες που θα σας βοηθήσουν να κάνετε μια επιλογή. Δεν πρέπει να δημιουργήσετε μια έκδοση 64-bit μιας εφαρμογής με σύντομο κύκλο ζωής. Χάρη στο υποσύστημα WOW64, οι παλιές εφαρμογές 32 bit λειτουργούν αρκετά καλά σε συστήματα Windows 64 bit και επομένως δεν έχει νόημα να φτιάξουμε ένα πρόγραμμα 64 bit που δεν θα υποστηρίζεται πλέον σε 2 χρόνια. Επιπλέον, η πρακτική έχει δείξει ότι η μετάβαση σε εκδόσεις 64 bit των Windows έχει καθυστερήσει και ίσως η πλειοψηφία των χρηστών σας βραχυπρόθεσμα θα χρησιμοποιήσει μόνο την έκδοση 32 bit της λύσης λογισμικού σας. Εάν σχεδιάζετε μακροπρόθεσμη ανάπτυξη και μακροπρόθεσμη υποστήριξη ενός προϊόντος λογισμικού, τότε θα πρέπει να αρχίσετε να εργάζεστε στην έκδοση 64-bit της λύσης σας. Αυτό μπορεί να γίνει αργά, αλλά έχετε κατά νου ότι όσο περισσότερο δεν έχετε μια πλήρη έκδοση 64-bit, τόσο περισσότερες δυσκολίες μπορεί να προκύψουν με την υποστήριξη μιας τέτοιας εφαρμογής που είναι εγκατεστημένη σε εκδόσεις 64-bit των Windows. Η εκ νέου μεταγλώττιση του προγράμματος για ένα σύστημα 64-bit θα του επιτρέψει να χρησιμοποιεί τεράστιες ποσότητες μνήμης RAM και επίσης θα επιταχύνει τη λειτουργία του κατά 5-15%. Θα προκύψει επιτάχυνση 5-10% λόγω της χρήσης των αρχιτεκτονικών δυνατοτήτων ενός επεξεργαστή 64-bit, για παράδειγμα, ενός μεγαλύτερου αριθμού καταχωρητών. Μια άλλη αύξηση 1%-5% στην ταχύτητα οφείλεται στην απουσία του επιπέδου WOW64, το οποίο μεταφράζει τις κλήσεις API μεταξύ εφαρμογών 32 bit και λειτουργικού συστήματος 64 bit. Εάν το πρόγραμμά σας δεν λειτουργεί με μεγάλες ποσότητες δεδομένων (πάνω από 2 GB) και η ταχύτητά του δεν είναι κρίσιμη, τότε η μετάβαση σε σύστημα 64 bit στο εγγύς μέλλον δεν είναι τόσο σημαντική. Παρεμπιπτόντως, ακόμη και απλές εφαρμογές 32 bit μπορούν να επωφεληθούν από την εκτέλεση τους σε περιβάλλον 64 bit. Πιθανότατα γνωρίζετε ότι ένα πρόγραμμα που έχει μεταγλωττιστεί με το πλήκτρο /LARGEADDRESSAWARE:YES μπορεί να εκχωρήσει έως και 3 gigabyte μνήμης εάν το λειτουργικό σύστημα Windows 32-bit εκκινηθεί με το πλήκτρο /3gb. Το ίδιο πρόγραμμα 32-bit που εκτελείται σε σύστημα 64-bit μπορεί να εκχωρήσει σχεδόν 4 GB μνήμης (στην πράξη, περίπου 3,5 GB). Εάν αναπτύσσετε βιβλιοθήκες, στοιχεία ή άλλα στοιχεία που χρησιμοποιούν τρίτοι προγραμματιστές για τη δημιουργία του λογισμικού τους, τότε πρέπει να είστε προνοητικοί στη δημιουργία μιας έκδοσης 64-bit του προϊόντος σας. Διαφορετικά, οι πελάτες σας που ενδιαφέρονται να κυκλοφορήσουν εκδόσεις 64 bit θα αναγκαστούν να αναζητήσουν εναλλακτικές λύσεις. Για παράδειγμα, ορισμένοι προγραμματιστές προστασίας λογισμικού και υλικού απάντησαν με μεγάλη καθυστέρηση στην εμφάνιση προγραμμάτων 64-bit, γεγονός που ανάγκασε ορισμένους πελάτες να αναζητήσουν άλλα εργαλεία για την προστασία των προγραμμάτων τους. Ένα επιπλέον πλεονέκτημα της κυκλοφορίας μιας έκδοσης 64-bit της βιβλιοθήκης είναι ότι μπορείτε να την πουλήσετε ως ξεχωριστό προϊόν. Έτσι, οι πελάτες σας που θέλουν να δημιουργήσουν εφαρμογές 32-bit και 64-bit θα αναγκαστούν να αγοράσουν 2 διαφορετικές άδειες χρήσης. Για παράδειγμα, αυτή η πολιτική χρησιμοποιείται από την Spatial Corporation κατά την πώληση της βιβλιοθήκης Spatial ACIS. Προτού σκοπεύετε να δημιουργήσετε εκδόσεις 64 bit του προϊόντος σας, μάθετε εάν υπάρχουν εκδόσεις 64 bit των βιβλιοθηκών και των στοιχείων που χρησιμοποιεί. Μάθετε επίσης ποια είναι η τιμολογιακή πολιτική για την έκδοση 64-bit της βιβλιοθήκης. Όλα αυτά μπορείτε να τα μάθετε επισκεπτόμενοι τον ιστότοπο του προγραμματιστή της βιβλιοθήκης. Εάν η υποστήριξη δεν είναι διαθέσιμη, τότε αναζητήστε εκ των προτέρων εναλλακτικές λύσεις που υποστηρίζουν συστήματα 64-bit. Εάν οι λύσεις σας εξακολουθούν να περιέχουν μονάδες 16-bit, τότε ήρθε η ώρα να τις ξεφορτωθείτε. Η εκτέλεση εφαρμογών 16 bit σε εκδόσεις 64 bit των Windows δεν υποστηρίζεται. Εδώ θα πρέπει να διευκρινίσουμε ένα σημείο που σχετίζεται με τη χρήση προγραμμάτων εγκατάστασης 16 bit. Εξακολουθούν να χρησιμοποιούνται για την εγκατάσταση ορισμένων εφαρμογών 32-bit. Έχει δημιουργηθεί ένας ειδικός μηχανισμός που εν κινήσει αντικαθιστά μια σειρά από τα πιο δημοφιλή προγράμματα εγκατάστασης 16-bit με νεότερες εκδόσεις. Αυτό μπορεί να προκαλέσει την εσφαλμένη αντίληψη ότι τα προγράμματα 16 bit εξακολουθούν να εκτελούνται σε περιβάλλον 64 bit. Θυμηθείτε, αυτό δεν είναι αλήθεια. Μην ξεχνάτε ότι η χρήση μεγάλης ποσότητας κώδικα συναρμολόγησης μπορεί να αυξήσει σημαντικά το κόστος δημιουργίας μιας έκδοσης 64-bit της εφαρμογής. Αφού σταθμίσετε όλα τα στοιχεία που αναφέρονται, όλα τα πλεονεκτήματα και τα μειονεκτήματα, αποφασίστε εάν θα πρέπει να μεταφέρετε το έργο σας σε συστήματα 64 bit. Και αν είναι έτσι, τότε ας προχωρήσουμε. Ακριβώς επειδή αποφασίσατε να αναπτύξετε μια έκδοση 64-bit του προϊόντος σας και είστε πρόθυμοι να αφιερώσετε χρόνο σε αυτό δεν εγγυάται την επιτυχία. Γεγονός είναι ότι πρέπει να έχετε όλα τα απαραίτητα εργαλεία και μπορεί να υπάρξουν δυσάρεστα περιστατικά εδώ.

Το πιο απλό, αλλά και το πιο ανυπέρβλητο, πρόβλημα μπορεί να είναι η έλλειψη μεταγλωττιστή 64 bit. Το άρθρο γράφτηκε το 2009, αλλά δεν υπάρχει ακόμα κανένας μεταγλωττιστής C++ Builder 64-bit από την Codegear. Η κυκλοφορία του αναμένεται μόνο μέχρι το τέλος του τρέχοντος έτους. Είναι αδύνατο να αντιμετωπίσετε ένα παρόμοιο πρόβλημα, εκτός εάν, φυσικά, ξαναγράψετε ολόκληρο το έργο, για παράδειγμα, χρησιμοποιώντας το Visual Studio. Αλλά αν όλα είναι ξεκάθαρα με την έλλειψη ενός μεταγλωττιστή 64-bit, τότε άλλα παρόμοια προβλήματα μπορεί να αποδειχθούν πιο κρυφά και να εμφανιστούν ήδη στο στάδιο της εργασίας για τη μεταφορά του έργου σε μια νέα αρχιτεκτονική. Ως εκ τούτου, θα ήθελα να σας συμβουλεύσω να κάνετε έρευνα εκ των προτέρων για να διαπιστώσετε εάν υπάρχουν όλα τα απαραίτητα στοιχεία που θα απαιτηθούν για την υλοποίηση της έκδοσης 64-bit του προϊόντος σας. Μπορεί να σας περιμένουν δυσάρεστες εκπλήξεις.

Φυσικά, είναι αδύνατο να απαριθμήσετε όλα όσα μπορεί να χρειάζονται για ένα έργο εδώ, αλλά θα συνεχίσω να προσφέρω μια λίστα που θα σας βοηθήσει να καταλάβετε και ίσως να θυμηθείτε άλλα σημεία που είναι απαραίτητα για την υλοποίηση του έργου 64-bit: Είναι δύσκολο να πούμε οτιδήποτε άλλο για τη σημασία της ύπαρξης μεταγλωττιστή 64-bit. Απλώς πρέπει να είναι. Εάν σκοπεύετε να αναπτύξετε εφαρμογές 64-bit χρησιμοποιώντας την πιο πρόσφατη έκδοση (τη στιγμή της σύνταξης) του Visual Studio 2008, τότε ο παρακάτω πίνακας N2 θα σας βοηθήσει να προσδιορίσετε ποια έκδοση του Visual Studio χρειάζεστε.

Πίνακας N2. Δυνατότητες διαφόρων εκδόσεων του Visual Studio 2008 Μπορείτε, φυσικά, να χρησιμοποιήσετε εικονικές μηχανές για την εκτέλεση εφαρμογών 64-bit σε υλικό 32-bit, αλλά αυτό είναι εξαιρετικά ενοχλητικό και δεν παρέχει το απαιτούμενο επίπεδο δοκιμών. Συνιστάται τα μηχανήματα να έχουν τουλάχιστον 4-8 gigabytes εγκατεστημένη μνήμη RAM. Εάν οι βιβλιοθήκες παρέχονται σε πηγαίο κώδικα, τότε πρέπει να υπάρχει μια διαμόρφωση έργου 64-bit. Η αναβάθμιση μιας βιβλιοθήκης μόνοι σας για να την δημιουργήσετε για ένα σύστημα 64-bit μπορεί να είναι μια άχαρη και δύσκολη εργασία και το αποτέλεσμα μπορεί να είναι αναξιόπιστο και επιρρεπές σε σφάλματα. Μπορείτε επίσης να παραβιάσετε τις συμφωνίες άδειας χρήσης με αυτόν τον τρόπο. Εάν χρησιμοποιείτε βιβλιοθήκες ως δυαδικές μονάδες, τότε θα πρέπει επίσης να μάθετε εάν υπάρχουν μονάδες 64-bit. Δεν θα μπορείτε να χρησιμοποιήσετε αρχεία DLL 32 bit μέσα σε μια εφαρμογή 64 bit. Μπορείτε να δημιουργήσετε μια ειδική πλεξούδα μέσω COM, αλλά αυτό θα είναι μια ξεχωριστή μεγάλη, πολύπλοκη εργασία. Σημειώστε επίσης ότι η αγορά της έκδοσης 64-bit της βιβλιοθήκης μπορεί να κοστίσει επιπλέον χρήματα. Το Visual C++ δεν υποστηρίζει ενσωματωμένη συναρμολόγηση 64-bit. Πρέπει να χρησιμοποιήσετε είτε έναν εξωτερικό assembler 64-bit (για παράδειγμα, MASM) είτε να έχετε υλοποίηση C/C++ της ίδιας λειτουργικότητας. Σημαντική αναθεώρηση της μεθοδολογίας δοκιμών, εκσυγχρονισμός μοναδιαίων δοκιμών, χρήση νέων εργαλείων. Αυτό θα συζητηθεί με περισσότερες λεπτομέρειες παρακάτω, αλλά μην ξεχάσετε να το λάβετε υπόψη κατά την εκτίμηση του χρόνου που αφιερώθηκε στη μετεγκατάσταση μιας εφαρμογής σε ένα νέο σύστημα. Εάν αναπτύσσετε εφαρμογές έντασης πόρων που καταναλώνουν μεγάλη ποσότητα μνήμης RAM, τότε πρέπει να φροντίσετε να συμπληρώσετε τη βάση δεδομένων των δεδομένων εισόδου δοκιμής. Κατά τη φόρτωση δοκιμών εφαρμογών 64-bit, συνιστάται να υπερβείτε τα 4 gigabyte κατανάλωσης μνήμης. Πολλά σφάλματα μπορούν να εμφανιστούν μόνο υπό τέτοιες συνθήκες. Το σύστημα προστασίας που χρησιμοποιείται πρέπει να υποστηρίζει συστήματα 64-bit στον πλήρη βαθμό που χρειάζεστε. Για παράδειγμα, η Aladdin κυκλοφόρησε γρήγορα προγράμματα οδήγησης 64-bit για την υποστήριξη των κλειδιών υλικού Hasp. Αλλά για πολύ μεγάλο χρονικό διάστημα δεν υπήρχε σύστημα αυτόματης προστασίας δυαδικών αρχείων 64-bit (πρόγραμμα Hasp Envelop). Έτσι, ο μηχανισμός προστασίας έπρεπε να εφαρμοστεί ανεξάρτητα μέσα στον κώδικα του προγράμματος, κάτι που ήταν ένα επιπλέον πολύπλοκο έργο που απαιτούσε προσόντα και χρόνο. Μην ξεχνάτε παρόμοια ζητήματα που σχετίζονται με την ασφάλεια, το σύστημα ενημέρωσης και ούτω καθεξής. Χρειάζεστε ένα νέο πρόγραμμα εγκατάστασης που μπορεί να εγκαταστήσει πλήρως εφαρμογές 64-bit. Θα ήθελα να σας προειδοποιήσω αμέσως για ένα παραδοσιακό λάθος. Πρόκειται για τη δημιουργία προγραμμάτων εγκατάστασης 64 bit για την εγκατάσταση προϊόντων λογισμικού 32/64 bit. Κατά την προετοιμασία μιας έκδοσης 64-bit μιας εφαρμογής, οι προγραμματιστές συχνά θέλουν να την κάνουν πλήρως 64-bit. Και δημιουργούν ένα πρόγραμμα εγκατάστασης 64-bit, ξεχνώντας ότι οι χρήστες ενός λειτουργικού συστήματος 32-bit απλά δεν θα εκτελέσουν ένα τέτοιο πακέτο εγκατάστασης. Λάβετε υπόψη ότι δεν θα ξεκινήσει η εφαρμογή 32 bit που περιλαμβάνεται στη διανομή μαζί με τα 64 bit, αλλά το ίδιο το πρόγραμμα εγκατάστασης. Άλλωστε, εάν η διανομή είναι μια εφαρμογή 64-bit, τότε, φυσικά, δεν θα εκτελεστεί σε λειτουργικό σύστημα 32-bit. Το πιο ενοχλητικό σε αυτό είναι ότι ο χρήστης δεν θα μπορεί να μαντέψει τι συμβαίνει. Θα δει απλώς ένα πακέτο εγκατάστασης που δεν μπορεί να ξεκινήσει. Η δημιουργία μιας διαμόρφωσης έργου 64-bit στο Visual Studio 2005/2008 φαίνεται αρκετά απλή. Θα σας περιμένουν δυσκολίες στο στάδιο της συναρμολόγησης μιας νέας διαμόρφωσης και της αναζήτησης σφαλμάτων σε αυτήν. Για να δημιουργήσετε μια διαμόρφωση 64-bit, απλώς ολοκληρώστε τα ακόλουθα 4 βήματα: Εκκινήστε τη διαχείριση ρυθμίσεων, όπως φαίνεται στην Εικόνα N1:

Εικόνα 1. Εκκίνηση του configuration manager Στη διαχείριση διαμόρφωσης, επιλέξτε υποστήριξη για τη νέα πλατφόρμα (Εικόνα N2): Εικόνα 2. Δημιουργία νέας διαμόρφωσης Επιλέξτε την πλατφόρμα 64-bit (x64) και επιλέξτε τις ρυθμίσεις από την έκδοση 32-bit ως βάση (Εικόνα N3). Το Visual Studio θα προσαρμόσει τις ρυθμίσεις που επηρεάζουν την ίδια τη λειτουργία κατασκευής.

Εικόνα 3. Επιλέξτε x64 ως πλατφόρμα και χρησιμοποιήστε τη διαμόρφωση Win32 ως βάση. Η επιλογή της διαμόρφωσης 64-bit για συναρμολόγηση φαίνεται στο Σχήμα N4. Εικόνα 4. Οι διαμορφώσεις 32-bit και 64-bit είναι πλέον διαθέσιμες. Αλλά αυτό εξαρτάται σε μεγάλο βαθμό από το έργο, την πολυπλοκότητά του και τον αριθμό των βιβλιοθηκών που χρησιμοποιούνται. Το μόνο πράγμα που πρέπει να αλλάξει αμέσως είναι το μέγεθος της στοίβας. Εάν το έργο σας χρησιμοποιεί ένα προεπιλεγμένο μέγεθος στοίβας, δηλαδή 1 megabyte, τότε είναι λογικό να το ορίσετε στα 2 megabyte για την έκδοση 64 bit. Αυτό δεν είναι απαραίτητο, αλλά είναι καλύτερα να είστε στην ασφαλή πλευρά εκ των προτέρων. Εάν χρησιμοποιείτε ένα μέγεθος στοίβας διαφορετικό από το προεπιλεγμένο μέγεθος, τότε είναι λογικό να το κάνετε 2 φορές μεγαλύτερο για την έκδοση 64-bit. Για να το κάνετε αυτό, στις ρυθμίσεις του έργου, βρείτε και αλλάξτε τις παραμέτρους Stack Reserve Size και Stack Commit Size. Εδώ θα ήταν καλό να μιλήσουμε για τυπικά προβλήματα που προκύπτουν κατά το στάδιο της μεταγλώττισης μιας διαμόρφωσης 64-bit. Εξετάστε ποια προβλήματα προκύπτουν με τις βιβλιοθήκες τρίτων, πείτε ότι ο μεταγλωττιστής στον κώδικα που σχετίζεται με τις συναρτήσεις WInAPI δεν θα επιτρέπει πλέον την τοποθέτηση δείκτη στον τύπο LONG και θα χρειαστεί να εκσυγχρονίσετε τον κώδικά σας και να χρησιμοποιήσετε τον τύπο LONG_PTG. Και πολλά πολλά άλλα. Δυστυχώς, υπάρχουν τόσα πολλά από αυτά και τα λάθη είναι τόσο ποικίλα που δεν είναι δυνατό να τα παρουσιάσουμε σε ένα άρθρο ή ακόμα και, ίσως, σε ένα βιβλίο. Θα πρέπει να εξετάσετε όλα τα σφάλματα που θα παράγει ο μεταγλωττιστής και τις νέες προειδοποιήσεις που δεν υπήρχαν πριν και σε κάθε μεμονωμένη περίπτωση να βρείτε πώς να εκσυγχρονίσετε τον κώδικα.

Μια συλλογή από συνδέσμους σε πόρους αφιερωμένους στην ανάπτυξη εφαρμογών 64-bit μπορεί να κάνει τη ζωή εν μέρει ευκολότερη: http://www.viva64.com/links/64-bit-development/. Η συλλογή ενημερώνεται συνεχώς και ο συγγραφέας θα είναι ευγνώμων στους αναγνώστες εάν του στείλουν συνδέσμους σε πόρους που, κατά τη γνώμη τους, αξίζουν προσοχή.

Θα εστιάσουμε εδώ μόνο στους τύπους που μπορεί να ενδιαφέρουν τους προγραμματιστές κατά τη μετεγκατάσταση εφαρμογών. Αυτοί οι τύποι παρουσιάζονται στον Πίνακα N3. Τα περισσότερα σφάλματα μεταγλώττισης θα σχετίζονται με τη χρήση αυτών των τύπων.

Τύπος Τύπος διάστασης στην πλατφόρμα x32 / x64 Σημείωση
ενθ 32 / 32 Βασικός τύπος. Σε συστήματα 64 bit παραμένει 32 bit.
μακρύς 32 / 32 Βασικός τύπος. Σε συστήματα Windows 64-bit παραμένει 32-bit. Λάβετε υπόψη ότι σε συστήματα Linux 64-bit αυτός ο τύπος έχει επεκταθεί στα 64-bit. Μην το ξεχνάτε αυτό εάν αναπτύσσετε κώδικα που θα πρέπει να λειτουργεί και να μεταγλωττίζεται για συστήματα Windows και Linux.
μέγεθος_t 32 / 64 Βασικός ανυπόγραφος τύπος. Το μέγεθος του τύπου επιλέγεται έτσι ώστε να μπορεί να φιλοξενήσει το μέγιστο μέγεθος μιας θεωρητικά πιθανής διάταξης. Ένας δείκτης μπορεί να τοποθετηθεί με ασφάλεια στον τύπο size_t (η εξαίρεση είναι οι δείκτες σε συναρτήσεις κλάσης, αλλά αυτή είναι μια ειδική περίπτωση).
ptrdiff_t 32 / 64 Παρόμοιο με τον τύπο size_t, αλλά υπογεγραμμένο. Το αποτέλεσμα μιας έκφρασης όπου ένας δείκτης αφαιρείται από έναν άλλο (ptr1-ptr2) θα είναι του τύπου ptrdiff_t.
Δείκτης 32 / 64 Το μέγεθος του δείκτη εξαρτάται άμεσα από τη χωρητικότητα bit της πλατφόρμας. Να είστε προσεκτικοί όταν ρίχνετε δείκτες σε άλλους τύπους.
__int64 64 / 64 Υπογεγραμμένος τύπος 64 bit.
DWORD 32 / 32 Ανυπόγραφος τύπος 32 bit. Δηλώθηκε στο WinDef.h ως: typedef unsigned long DWORD;
DWORDLONG 64 / 64 Ανυπόγραφος τύπος 64 bit. Δηλώθηκε στο WinNT.h ως: typedef ULONGLONG DWORDLONG;
DWORD_PTR 32 / 64 Ένας ανυπόγραφος τύπος που μπορεί να κρατήσει δείκτη. Δηλώθηκε στο BaseTsd.h ως: typedef ULONG_PTR DWORD_PTR;
DWORD32 32 / 32 Ανυπόγραφος τύπος 32 bit. Δηλώθηκε στο BaseTsd.h ως: typedef unsigned int DWORD32;
DWORD64 64 / 64 Ανυπόγραφος τύπος 64 bit. Δηλώθηκε στο BaseTsd.h ως: typedef unsigned __int64 DWORD64;
HALF_PTR 16 / 32 Μισός δείκτης. Δηλώθηκε στο Basetd.h ως:#ifdef _WIN64 typedef int HALF_PTR;#else typedef short HALF_PTR;#endif
INT_PTR 32 / 64 Ένας υπογεγραμμένος τύπος στον οποίο μπορεί να τοποθετηθεί ένας δείκτης. Δηλώθηκε στο BaseTsd.h ως:#if defined(_WIN64) typedef __int64 INT_PTR; #else typedef int INT_PTR;#endif
ΜΑΚΡΥΣ 32 / 32 Ένας υπογεγραμμένος τύπος που παραμένει 32-bit. Επομένως, σε πολλές περιπτώσεις θα πρέπει τώρα να χρησιμοποιείται το LONG_PTR. Δηλώθηκε στο WinNT.h ως: typedef long LONG;
LONG_PTR 32 / 64 Ένας υπογεγραμμένος τύπος στον οποίο μπορεί να τοποθετηθεί ένας δείκτης. Δηλώθηκε στο BaseTsd.h ως:#if defined(_WIN64) typedef __int64 LONG_PTR; #else typedef long LONG_PTR;#endif
LPARAM 32 / 64 Επιλογή για αποστολή μηνυμάτων. Δηλώθηκε στο WinNT.h ως: typedef LONG_PTR LPARAM;
SIZE_T 32 / 64 Ανάλογο με τον τύπο size_t. Δηλώθηκε στο BaseTsd.h ως: typedef ULONG_PTR SIZE_T;
SSIZE_T 32 / 64 Ανάλογο με τον τύπο ptrdiff_t. Δηλώθηκε στο BaseTsd.h ως: typedef LONG_PTR SSIZE_T;
ULONG_PTR 32 / 64 Ένας ανυπόγραφος τύπος που μπορεί να κρατήσει δείκτη. Δηλώθηκε στο BaseTsd.h ως:#if defined(_WIN64) typedef unsigned __int64 ULONG_PTR;#else typedef unsigned long ULONG_PTR;#endif
ΛΕΞΗ 16 / 16 Ανυπόγραφος τύπος 16 bit. Δηλώθηκε στο WinDef.h ως: typedef ανυπόγραφο σύντομο WORD;
WPARAM 32 / 64 Επιλογή για αποστολή μηνυμάτων. Δηλώθηκε στο WinDef.h ως: typedef UINT_PTR WPARAM;
Πίνακας N3. Τύποι ενδιαφέροντος κατά τη μεταφορά προγραμμάτων 32 bit σε συστήματα Windows 64 bit. Εάν πιστεύετε ότι μετά τη διόρθωση όλων των σφαλμάτων μεταγλώττισης θα ληφθεί η πολυαναμενόμενη εφαρμογή 64-bit, τότε θα πρέπει να απογοητευτείτε. Το πιο δύσκολο κομμάτι έρχεται. Στο στάδιο της μεταγλώττισης, θα διορθώσετε τα πιο εμφανή σφάλματα που θα μπορούσε να εντοπίσει ο μεταγλωττιστής, τα οποία σχετίζονται κυρίως με την αδυναμία σιωπηρού τύπου casting. Αλλά αυτή είναι η κορυφή του παγόβουνου. Τα περισσότερα λάθη είναι κρυμμένα. Από τη σκοπιά της αφηρημένης γλώσσας C++, αυτά τα σφάλματα φαίνονται ασφαλή ή συγκαλύπτονται από εκπομπές ρητού τύπου. Υπάρχουν πολλές φορές περισσότερα τέτοια σφάλματα από τον αριθμό των σφαλμάτων που εντοπίστηκαν στο στάδιο της μεταγλώττισης.

Δεν πρέπει να εναποθέσετε τις ελπίδες σας στο κλειδί /Wp64. Αυτό το κλειδί συχνά διαφημίζεται ως θαυματουργό εργαλείο για την εύρεση σφαλμάτων 64-bit. Στην πραγματικότητα, ο διακόπτης /Wp64 καθιστά δυνατή μόνο, κατά τη μεταγλώττιση κώδικα 32-bit, να λαμβάνετε ορισμένες προειδοποιήσεις ότι ορισμένα τμήματα του κώδικα θα είναι λανθασμένα σε λειτουργία 64-bit. Κατά τη μεταγλώττιση κώδικα 64-bit, αυτές οι προειδοποιήσεις θα εκδοθούν από τον μεταγλωττιστή σε κάθε περίπτωση. Και επομένως, κατά τη μεταγλώττιση μιας εφαρμογής 64-bit, το κλειδί /Wp64 αγνοείται. Και ακόμη περισσότερο, αυτό το κλειδί δεν θα βοηθήσει στην εύρεση κρυφών σφαλμάτων.

Ας δούμε μερικά παραδείγματα κρυφών σφαλμάτων. Η απλούστερη, αλλά όχι η πιο εύκολη στην ανίχνευση, κατηγορία σφαλμάτων σχετίζεται με χύτευση σαφούς τύπου, στην οποία αποκόπτονται σημαντικά bits. Ένα συνηθισμένο παράδειγμα είναι η μετάδοση δεικτών σε τύπους 32-bit κατά τη μετάβασή τους σε λειτουργίες όπως το SendMessage:

MyObj* pObj = ... ::SendMessage(hwnd, msg, (WORD)x, (DWORD)pObj);
Εδώ χρησιμοποιείται ένα cast ρητού τύπου για τη μετατροπή ενός δείκτη σε αριθμητικό τύπο. Για μια αρχιτεκτονική 32 bit, το παραπάνω παράδειγμα είναι σωστό, καθώς η τελευταία παράμετρος της συνάρτησης SendMessage είναι τύπου LPARAM, η οποία είναι ίδια με το DWORD σε μια αρχιτεκτονική 32 bit. Για αρχιτεκτονική 64 bit, η χρήση του DWORD είναι εσφαλμένη και θα πρέπει να αντικατασταθεί με LPARAM. Ο τύπος LPARAM έχει μέγεθος 32 ή 64 bit, ανάλογα με την αρχιτεκτονική.

Αυτή είναι μια απλή περίπτωση, αλλά συχνά ο τύπος cast φαίνεται πιο περίπλοκος και δεν μπορεί να εντοπιστεί χρησιμοποιώντας προειδοποιήσεις μεταγλωττιστή ή αναζήτηση στο κείμενο του προγράμματος. Οι εκπομπές ρητού τύπου καταστέλλουν τα διαγνωστικά μεταγλωττιστή επειδή έχουν σκοπό να πουν στον μεταγλωττιστή ότι ο τύπος cast είναι σωστός και ο προγραμματιστής έχει αποδεχθεί την ευθύνη για την ασφάλεια του κώδικα. Ούτε μια ρητή αναζήτηση θα βοηθήσει. Οι τύποι μπορεί να μην έχουν τυπικά ονόματα (που καθορίζονται από τον προγραμματιστή μέσω του typedef) και υπάρχουν επίσης αρκετοί τρόποι για την υλοποίηση χύτευσης ρητού τύπου. Για να διαγνώσετε αξιόπιστα τέτοια σφάλματα, πρέπει να χρησιμοποιείτε μόνο ειδικά εργαλεία, όπως αναλυτές Viva64 ή PC-Lint.

Το επόμενο παράδειγμα σχετίζεται με ένα σιωπηρό cast, το οποίο επίσης οδηγεί σε απώλεια σημαντικών bits. Ο κώδικας της συνάρτησης fread διαβάζεται από ένα αρχείο, αλλά είναι εσφαλμένος όταν προσπαθείτε να διαβάσετε περισσότερα από 2 gigabyte δεδομένων σε ένα σύστημα 64-bit.

size_t __fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp); size_t fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp) (int ret; FLOCKFILE(fp); ret = __fread(buf, size, count, fp); FUNLOCKFILE(fp); return (ret) )
Η συνάρτηση __fread επιστρέφει έναν τύπο size_t, αλλά ο τύπος int χρησιμοποιείται για την αποθήκευση του αριθμού των byte που διαβάζονται. Ως αποτέλεσμα, με μεγάλη ποσότητα δεδομένων που διαβάζονται, η συνάρτηση μπορεί να επιστρέψει διαφορετικό αριθμό byte από αυτόν που θα διαβαστεί πραγματικά. Μπορείτε να πείτε ότι αυτός είναι κώδικας άγνοιας για αρχάριους, ότι ο μεταγλωττιστής θα αναφέρει έναν τέτοιο τύπο cast και ότι γενικά ένας τέτοιος κώδικας είναι εύκολο να βρεθεί και να διορθωθεί. Αυτό είναι θεωρητικό. Αλλά στην πραγματική ζωή, με μεγάλα έργα, όλα μπορεί να είναι διαφορετικά. Αυτό το παράδειγμα προέρχεται από τον πηγαίο κώδικα του FreeBSD. Το λάθος διορθώθηκε μόλις τον Δεκέμβριο του 2008! Αυτό συμβαίνει παρά το γεγονός ότι η πρώτη (πειραματική) έκδοση 64-bit του FreeBSD κυκλοφόρησε τον Ιούνιο του 2003. Εδώ είναι ο πηγαίος κώδικας πριν από την επιδιόρθωση:

http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdio/fread.c?rev=1.14

Και εδώ είναι η διορθωμένη έκδοση (Δεκέμβριος 2008):

http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdio/fread.c?rev=1.15

Είναι εύκολο να κάνετε λάθη σε κώδικα που λειτουργεί με μεμονωμένα bit. Ο επόμενος τύπος σφάλματος σχετίζεται με λειτουργίες βάρδιας. Ας δούμε ένα παράδειγμα:

ptrdiff_t SetBitN(τιμή ptrdiff_t, unsigned bitNum) ( μάσκα ptrdiff_t = 1
Ο παραπάνω κώδικας λειτουργεί σε αρχιτεκτονική 32 bit και σας επιτρέπει να ορίσετε bits με αριθμό από 0 έως 31 προς ένα. Μετά τη μεταφορά του προγράμματος σε μια πλατφόρμα 64 bit, θα χρειαστεί να ορίσετε bit από 0 έως 63. Αλλά αυτός ο κωδικός δεν θα ορίσει ποτέ τα bits με αριθμό 32-63. Λάβετε υπόψη ότι το "1" είναι τύπου int και όταν μετατοπιστεί κατά 32 θέσεις θα συμβεί υπερχείλιση, όπως φαίνεται στο Σχήμα 5. Εάν το αποτέλεσμα είναι 0 (Εικόνα 5-Β) ή 1 (Εικόνα 5-Γ) εξαρτάται από τον μεταγλωττιστή εκτέλεση.

Εικόνα 5. A - Σωστή εγκατάσταση του 31ου bit σε έναν κώδικα 32 bit. B,C - Σφάλμα κατά τη ρύθμιση του 32ου bit σε ένα σύστημα 64-bit (δύο επιλογές συμπεριφοράς) Για να διορθώσετε τον κώδικα, πρέπει να κάνετε μια σταθερά "1" του ίδιου τύπου με τη μεταβλητή μάσκας:

ptrdiff_t mask = ptrdiff_t(1)
Σημειώστε επίσης ότι ο μη διορθωμένος κώδικας θα οδηγήσει σε ένα άλλο ενδιαφέρον σφάλμα. Όταν ρυθμίζετε 31 bit σε ένα σύστημα 64 bit, το αποτέλεσμα της συνάρτησης θα είναι η τιμή 0xffffffff80000000 (βλ. Εικόνα 6). Το αποτέλεσμα της έκφρασης 1 size_t ArraySize = N * 4; size_t *Array = (size_t *)malloc(ArraySize); Οι κύριοι αριθμοί που πρέπει να λαμβάνονται με προσοχή κατά τη μετάβαση σε μια πλατφόρμα 64-bit δίνονται στον Πίνακα N4.

Πίνακας N4. Οι κύριες μαγικές τιμές που είναι επικίνδυνες κατά τη μεταφορά εφαρμογών από μια πλατφόρμα 32-bit σε μια πλατφόρμα 64-bit Σε προγράμματα που επεξεργάζονται μεγάλους όγκους δεδομένων, ενδέχεται να προκύψουν σφάλματα που σχετίζονται με την ευρετηρίαση μεγάλων συστοιχιών ή μπορεί να εμφανιστούν αιώνιοι βρόχοι. Το παρακάτω παράδειγμα περιέχει 2 σφάλματα ταυτόχρονα:

const size_t μέγεθος = ...; char *array = ...; char *end = πίνακας + μέγεθος; for (ανυπόγραφο i = 0; i != μέγεθος; ++i) (const int one = 1; end[-i - one] = 0; )
Το πρώτο σφάλμα είναι ότι αν το μέγεθος των επεξεργασμένων δεδομένων υπερβαίνει τα 4 gigabyte (0xFFFFFFFFFF), τότε μπορεί να προκύψει ένας αιώνιος βρόχος, καθώς η μεταβλητή "i" είναι τύπου "unsigned" και δεν θα φτάσει ποτέ την τιμή 0xFFFFFFFFFF. Γράφω συγκεκριμένα ότι το περιστατικό είναι πιθανό, αλλά δεν θα συμβεί απαραίτητα. Εξαρτάται από τον κώδικα που δημιουργεί ο μεταγλωττιστής. Για παράδειγμα, στη λειτουργία εντοπισμού σφαλμάτων θα υπάρχει ο αιώνιος βρόχος, αλλά στον κώδικα απελευθέρωσης ο βρόχος θα εξαφανιστεί, οπότε ο μεταγλωττιστής θα αποφασίσει να βελτιστοποιήσει τον κώδικα χρησιμοποιώντας έναν καταχωρητή 64-bit για τον μετρητή και ο βρόχος θα είναι σωστός. Όλα αυτά προσθέτουν στη σύγχυση και ο κώδικας που λειτούργησε χθες μπορεί ξαφνικά να σταματήσει να λειτουργεί την επόμενη μέρα. Το δεύτερο σφάλμα σχετίζεται με τη μετάβαση μέσα από έναν πίνακα από το τέλος στην αρχή, για τον οποίο χρησιμοποιούνται αρνητικές τιμές ευρετηρίου. Ο παραπάνω κώδικας λειτουργεί σε λειτουργία 32 bit, αλλά όταν εκτελείται σε μηχανή 64 bit, στην πρώτη κιόλας επανάληψη του βρόχου, ο πίνακας θα έχει πρόσβαση πέρα ​​από τα όρια και το πρόγραμμα θα διακοπεί. Ας εξετάσουμε τον λόγο αυτής της συμπεριφοράς. Σύμφωνα με τον κανόνα της γλώσσας C++ σε ένα σύστημα 32-bit, η έκφραση "-i - one" θα αξιολογηθεί ως εξής (στο πρώτο βήμα i = 0):
  1. Η έκφραση "-i" είναι τύπου ανυπόγραφη και έχει την τιμή 0x00000000u.
  2. Η μεταβλητή "one" θα επεκταθεί από τον τύπο "int" στον τύπο unsigned και θα είναι ίση με 0x00000001u. Σημείωση: Ο τύπος int επεκτείνεται (σύμφωνα με το πρότυπο γλώσσας C++) για να πληκτρολογήσει "unsigned" εάν συμμετέχει σε μια λειτουργία όπου το δεύτερο όρισμα είναι τύπου unsigned.
  3. Συμβαίνει μια λειτουργία αφαίρεσης, η οποία περιλαμβάνει δύο τιμές τύπου ανυπόγραφες και το αποτέλεσμα της πράξης είναι 0x00000000u - 0x00000001u = 0xFFFFFFFFu. Σημειώστε ότι το αποτέλεσμα είναι ανυπόγραφου τύπου.
  4. Σε ένα σύστημα 32-bit, η πρόσβαση σε έναν πίνακα στο ευρετήριο 0xFFFFFFFFu ισοδυναμεί με τη χρήση του δείκτη -1. Δηλαδή, το τέλος είναι ανάλογο με το τέλος[-1]. Ως αποτέλεσμα, η επεξεργασία του στοιχείου πίνακα γίνεται σωστά.
Σε ένα σύστημα 64-bit στην τελευταία παράγραφο η εικόνα θα είναι διαφορετική. Ο ανυπόγραφος τύπος θα επεκταθεί σε signed ptrdiff_t και ο δείκτης πίνακα θα είναι ίσος με 0x00000000FFFFFFFFi64. Ως αποτέλεσμα, ο πίνακας θα είναι εκτός ορίων. Για να διορθώσετε τον κώδικα, πρέπει να χρησιμοποιήσετε τύπους όπως ptrdiff_t και size_t. Υπάρχουν λάθη για τα οποία, γενικά, δεν φταίει κανείς, αλλά αυτό δεν τους εμποδίζει να είναι λάθη. Φανταστείτε ότι πριν από πολύ καιρό σε έναν μακρινό γαλαξία (στο Visual Studio 6.0) αναπτύχθηκε ένα έργο που περιείχε την κλάση CSampleApp, η οποία είναι απόγονος του CWinApp. Η βασική κλάση έχει μια εικονική συνάρτηση που ονομάζεται WinHelp. Ο κληρονόμος παρακάμπτει αυτή τη λειτουργία και εκτελεί τις απαραίτητες ενέργειες. Αυτό παρουσιάζεται οπτικά στο Σχήμα 7.

Εικόνα 7. Ο σωστός κώδικας λειτουργίας που δημιουργήθηκε στο Visual Studio 6.0 Στη συνέχεια το έργο μεταφέρεται στο Visual Studio 2005, όπου το πρωτότυπο της συνάρτησης WinHelp έχει αλλάξει, αλλά κανείς δεν το παρατηρεί αυτό, αφού σε λειτουργία 32-bit οι τύποι DWORD και DWORD_PTR είναι τα ίδια και το πρόγραμμα συνεχίζει να λειτουργεί σωστά (Εικόνα 8).

Εικόνα 8. Εσφαλμένος, αλλά εφαρμόσιμος κώδικας 32 bit Το σφάλμα περιμένει να εκδηλωθεί σε ένα σύστημα 64 bit, όπου το μέγεθος των τύπων DWORD και DWORD_PTR είναι διαφορετικό (Εικόνα 9). Αποδεικνύεται ότι σε λειτουργία 64-bit οι κλάσεις περιέχουν δύο ΔΙΑΦΟΡΕΤΙΚΕΣ συναρτήσεις WinHelp, κάτι που είναι φυσικά λανθασμένο. Λάβετε υπόψη ότι τέτοιες παγίδες μπορούν να κρυφτούν όχι μόνο στο MFC, όπου ορισμένες συναρτήσεις έχουν αλλάξει τους τύπους των ορισμάτων τους, αλλά και στον κώδικα των εφαρμογών σας και στις βιβλιοθήκες τρίτων.

Εικόνα 9. Το σφάλμα εκδηλώνεται σε κώδικα 64 bit Μπορούν να δοθούν και να δοθούν παραδείγματα παρόμοιων σφαλμάτων 64 bit. Όσοι ενδιαφέρονται για τέτοια σφάλματα και θέλουν να μάθουν περισσότερα για αυτά, θα ενδιαφέρονται για το άρθρο "20 παγίδες μεταφοράς κώδικα C++ σε πλατφόρμα 64-bit." Όπως μπορείτε να δείτε, το στάδιο της εύρεσης κρυφών σφαλμάτων είναι μια μη τετριμμένη εργασία, ειδικά επειδή πολλά από αυτά θα εμφανίζονται ακανόνιστα ή μόνο σε μεγάλους όγκους δεδομένων εισόδου. Οι αναλυτές στατικού κώδικα είναι κατάλληλοι για τη διάγνωση τέτοιων σφαλμάτων, καθώς μπορούν να ελέγξουν ολόκληρο τον κώδικα εφαρμογής, ανεξάρτητα από τα δεδομένα εισόδου και τη συχνότητα εκτέλεσης των τμημάτων του σε πραγματικές συνθήκες. Είναι λογικό να χρησιμοποιείται στατική ανάλυση τόσο στο στάδιο της μεταφοράς μιας εφαρμογής σε πλατφόρμες 64-bit προκειμένου να βρεθούν τα περισσότερα σφάλματα στο αρχικό στάδιο, όσο και στην περαιτέρω ανάπτυξη λύσεων 64-bit. Η στατική ανάλυση θα προειδοποιήσει και θα διδάξει τον προγραμματιστή να κατανοήσει καλύτερα τα χαρακτηριστικά των σφαλμάτων που σχετίζονται με την αρχιτεκτονική των 64 bit και να γράψει πιο αποτελεσματικό κώδικα. Ο συγγραφέας του άρθρου είναι ο προγραμματιστής ενός από αυτούς τους εξειδικευμένους αναλυτές κώδικα, που ονομάζεται Viva64. Μπορείτε να εξοικειωθείτε με το εργαλείο με περισσότερες λεπτομέρειες και να κατεβάσετε μια δοκιμαστική έκδοση από τον ιστότοπο της εταιρείας Software Verification Systems LLC. Για να είμαστε δίκαιοι, πρέπει να ειπωθεί ότι οι αναλυτές κώδικα όπως το Gimpel PC-Lint και το Parasoft C++Test έχουν ένα σύνολο κανόνων για τη διάγνωση σφαλμάτων 64 bit. Αλλά, πρώτον, αυτοί είναι αναλυτές γενικής χρήσης και οι κανόνες για τη διάγνωση σφαλμάτων 64-bit δεν παρουσιάζονται ελάχιστα σε αυτούς. Δεύτερον, επικεντρώνονται περισσότερο στο μοντέλο δεδομένων LP64 που χρησιμοποιείται στην οικογένεια λειτουργικών συστημάτων Linux, γεγονός που μειώνει τη χρησιμότητά τους για προγράμματα Windows που χρησιμοποιούν το μοντέλο δεδομένων LLP64. Το βήμα εύρεσης σφαλμάτων στον κώδικα προγράμματος που περιγράφεται στην προηγούμενη ενότητα είναι ένα απαραίτητο, αλλά όχι αρκετό βήμα. Καμία μέθοδος, συμπεριλαμβανομένης της ανάλυσης στατικού κώδικα, δεν παρέχει πλήρη εγγύηση για τον εντοπισμό όλων των σφαλμάτων και το καλύτερο αποτέλεσμα μπορεί να επιτευχθεί μόνο με το συνδυασμό διαφορετικών τεχνικών.

Εάν το πρόγραμμά σας 64 bit επεξεργάζεται περισσότερα δεδομένα από την έκδοση 32 bit, τότε πρέπει να επεκτείνετε τις δοκιμές ώστε να συμπεριλάβετε την επεξεργασία δεδομένων μεγαλύτερα από 4 gigabyte. Αυτό είναι το όριο πέρα ​​από το οποίο αρχίζουν να εκδηλώνονται πολλά σφάλματα 64-bit. Τέτοιες δοκιμές μπορεί να διαρκέσουν μια τάξη μεγέθους περισσότερο και πρέπει να είστε προετοιμασμένοι για αυτό εκ των προτέρων. Συνήθως οι δοκιμές είναι γραμμένες με τέτοιο τρόπο ώστε να επεξεργάζονται έναν μικρό αριθμό στοιχείων σε κάθε δοκιμή και έτσι να μπορούν να περάσουν όλες τις εσωτερικές δοκιμές μονάδων, για παράδειγμα; σε λίγα λεπτά και αυτοματοποιημένες δοκιμές (για παράδειγμα, χρησιμοποιώντας το AutomatedQA TestComplete) σε λίγες ώρες. Μια συνάρτηση ταξινόμησης σε ένα σύστημα 32-bit, εάν ταξινομήσει 100 στοιχεία, είναι σχεδόν εγγυημένο ότι θα συμπεριφέρεται σωστά σε 100.000 στοιχεία. Αλλά η ίδια λειτουργία σε ένα σύστημα 64-bit μπορεί να αποτύχει όταν προσπαθείτε να επεξεργαστείτε 5 δισεκατομμύρια στοιχεία. Η ταχύτητα εκτέλεσης μιας δοκιμής μονάδας μπορεί να μειωθεί κατά εκατομμύρια φορές. Μην ξεχνάτε να λαμβάνετε υπόψη το κόστος προσαρμογής των δοκιμών κατά τον έλεγχο συστημάτων 64-bit. Μια λύση είναι να χωρίσετε τις δοκιμές μονάδων σε γρήγορες (που λειτουργούν με μικρή ποσότητα μνήμης) και σε αργές, επεξεργασία gigabytes και εκτέλεση, για παράδειγμα, τη νύχτα. Η αυτοματοποιημένη δοκιμή προγραμμάτων 64-bit με ένταση πόρων μπορεί να κατασκευαστεί με βάση κατανεμημένους υπολογιστές.