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

C/C++ Optimizing ... [Μέρος 1ο]


NewProject

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

Δημοσ.

Λειτουργικο Συστημα :

 

Πλεονεκτηματα:

- τα 64-bit-α συστήματα μπορούν να βελτιώσουν την απόδοση της CPU κατά 5-10% ( για

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

 

- τα 64 bit συστήματα έχουν αρκετά πλεονεκτήματα σε σύγκριση με 32 bit συστήματα :

- ο αριθμος των registers ειναι διπλασιος

- οι παράμετροι (parameters) των συναρτησεων (functions) μεταφέρονται στα registers και όχι στη στοίβα (stack). Αυτό καθιστά το function calling πιο αποτελεσματικo.

- to allocation και το deallocation των μεγάλων μπλοκ μνήμης (memory blocks) είναι πιο αποτελεσματικo.

 

 

Μειονεκτηματα :

- οι δείκτες (πpointers) και αναφορές (references) γινονται με χρηση 64 bits και όχι

32 bit. Το γεγονός αυτό καθιστά τα δεδομένα caching ελαφρώς λιγότερο αποτελεσματικα.

- ο υπολογισμος διεύθυνσης είναι πιο περίπλοκος σε ένα μεγάλο μοντέλο μνήμης όπου ο

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

- καποια instructions ειναι ενα byte πιο μεγαλα στα 64bit-α σε συγκρηση με τα 32bit-α

συστηματα

 

 

Σύγκριση των βιβλιοθηκών ( function libraries ) :

( oι αριθμοί στον πίνακα που ακολουθει ειναι core clock cycles ανά byte δεδομένων )

 

optp11.jpg

 

 

Φορτωση προγραμματος :

- συχνά, χρειάζεται περισσότερο χρόνο για να φορτώσει ένα πρόγραμμα παρά να

εκτελεστει. Ο χρόνος φόρτωσης μπορεί να ειναι ενοχλητικά υψηλός για τα προγράμματα που βασίζονται σε μεγάλα runtime frameworks,

διερμηνείς (interpreters),just-in-time compilers, κ.λπ., όπως συνήθως συμβαίνει με τα

προγράμματα γραμμένα σε Java, C #, Visual Basic, κλπ.

 

- ο χρονος φόρτωσης πρoγραμματος μπορεί να είναι μεγαλος , ακόμη και για τα

προγράμματα που ειναι γραμμενα σε C++ . Αυτό συμβαίνει συνήθως όταν το πρόγραμμα

χρησιμοποιεί πολλά runtime DLLs , resource files, configuration files, help files και

βασεις δεδομένων (databases). Το λειτουργικό σύστημα δεν μπορεί να φορτώσει όλες τις ενότητες ενος μεγαλου προγραμματος , όταν το πρόγραμμα ξεκινά. Ορισμένες ενότητες μπορούν να φορτώνονται μόνο όταν τους χρειάζονται, ή μπορεί να

να ανταλλαχθούν με το σκληρό δίσκο εάν το μέγεθος μνήμης RAM είναι ανεπαρκες.

 

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

απαιτεί τη φόρτωση των modules ή αρχεία πόρου (resource files) από το δίσκο.Οι

απαιτητικες εφαρμογές ( σε μνημη ) "πιεζουν" το λειτουργικο συστήμα να ανταλλαζει μνήμη με το δίσκο. Το memory swapping είναι μια συχνή αιτία για

απαράδεκτα μεγάλo χρόνο απόκρισης σε απλά πράγματα, όπως μια κίνηση του ποντικιού ή το πάτημα του πλήκτρου.

 

- προσπαθηστε να αποφυγετε την υπερβολική αύξηση των DLLs, αρχεία ρυθμίσεων, τα αρχεία των πόρων, αρχεία βοήθειας κ.λπ. διάσπαρτα γύρω στο σκληρό δίσκο. Λίγα αρχεία, κατά προτίμηση στον ίδιο κατάλογο με το αρχείο .exe , είναι αποδεκτή.

 

 

Static Linking vs Dynamic Linking

-------------------------------------------------------------------------------

- το Static Linking περιλαμβάνει μόνο το τμήμα της βιβλιοθήκης που χρειάζεται

πραγματικά από την εφαρμογή, ενώ το Dynamic Linked κάνει όλη τη βιβλιοθήκη (ή τουλάχιστον ένα μεγάλο μέρος της ) να φορτωνεται στη μνήμη ακόμα και όταν είναι απαραίτητη μόνο μια λειτουργία.

 

- ολος ο κώδικας περιλαμβάνεται σε ένα εκτελέσιμο αρχείο όταν χρησιμοποιείται Static Linking. Απο την αλλη , το Dynamic Linking καθιστά αναγκαίο να φορτώσει διάφορα αρχεία, όταν το πρόγραμμα ξεκιναει.

 

- χρειάζεται περισσότερος χρόνος για να καλέσετε μια συνάρτηση σε μια βιβλιοθήκη

δυναμικής σύνδεσης σε σχέση με μια στατική σύνδεση , επειδή χρειάζεται ένα επιπλέον Jump μέσω ενός pointer σε έναν πίνακα εισαγωγής (import table).

 

- εγκαθιστώντας μια δεύτερη εφαρμογή που χρησιμοποιεί μια νεότερη έκδοση του ίδιου DLL μπορεί να αλλάξει τη συμπεριφορά της πρώτης , αν χρησιμοποιείται δυναμική σύνδεση.Αυτο δεν ισχυει οταν χρησιμοποιειται στατική σύνδεση.

-------------------------------------------------------------------------------

- πολλαπλές εφαρμογές που τρέχουν ταυτόχρονα μπορούν να μοιραστούν την ίδια DLL .Δεν ειναι αναγκη να φορτώσει περισσότερα από ένα DLL στη μνήμη. Αυτό είναι χρήσιμο για τους servers που τρέχουν πολλές διεργασίες ταυτόχρονα.

 

- ενα DLL μπορεί να ενημερωθεί σε μια νέα έκδοσή του και δεν χρειάζεται να ενημερώσετε το πρόγραμμα που το καλει .

 

- ενα DLL μπορεί καλειται από γλώσσες προγραμματισμού που δεν υποστηρίζουν στατική

σύνδεση.

 

- ενα DLL μπορεί να είναι χρήσιμο για την κατασκευή plug-ins που προσθέτουν

λειτουργικότητα σε ένα υπάρχον πρόγραμμα.

 

 

 

( part 2 is comming soon .. ;) )

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

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

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