Διαφορά μεταξύ βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και βελτιστοποίησης κώδικα

Πίνακας περιεχομένων:

Διαφορά μεταξύ βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και βελτιστοποίησης κώδικα
Διαφορά μεταξύ βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και βελτιστοποίησης κώδικα

Βίντεο: Διαφορά μεταξύ βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και βελτιστοποίησης κώδικα

Βίντεο: Διαφορά μεταξύ βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και βελτιστοποίησης κώδικα
Βίντεο: Μεταγλωττιστές - Περιβάλλον Εκτέλεσης & Παραγωγή Τελικού Κώδικα (Διάλεξη) 2024, Ιούλιος
Anonim

Βασική διαφορά – Εξαρτώμενη από μηχανή έναντι Βελτιστοποίηση κώδικα ανεξάρτητη από μηχανή

Τα προγράμματα υπολογιστών είναι σύνολα οδηγιών που δίνονται στο υλικό, για την εκτέλεση εργασιών. Αυτά τα προγράμματα είναι κυρίως γραμμένα σε γλώσσες υψηλού επιπέδου και ο υπολογιστής δεν καταλαβαίνει αυτή τη γλώσσα. Επομένως, ένας μεταγλωττιστής χρησιμοποιείται για να μετατρέψει αυτές τις οδηγίες σε κώδικα μηχανής ή κώδικα προορισμού. Περνάει από διάφορες φάσεις για τη δημιουργία του κώδικα στόχου. Η βελτιστοποίηση κώδικα είναι ένα από αυτά. Υπάρχουν δύο τεχνικές βελτιστοποίησης, όπως η βελτιστοποίηση κώδικα που εξαρτάται από τη μηχανή και η βελτιστοποίηση κώδικα ανεξάρτητα από τη μηχανή. Η βασική διαφορά μεταξύ της βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και της βελτιστοποίησης ανεξάρτητου από μηχανή είναι ότι η βελτιστοποίηση που εξαρτάται από τη μηχανή εφαρμόζεται στον κώδικα αντικειμένου ενώ η βελτιστοποίηση κώδικα ανεξάρτητη από μηχανή εφαρμόζεται στον ενδιάμεσο κώδικα.

Τι είναι η βελτιστοποίηση κωδικού εξαρτώμενου από τη μηχανή;

Όταν μετατρέπεται ο πηγαίος κώδικας σε κώδικα αντικειμένου ή κώδικα προορισμού, ο μεταγλωττιστής περνάει από διάφορες φάσεις. Αρχικά, ο πηγαίος κώδικας δίνεται στον Lexical αναλυτή που παράγει διακριτικά. Στη συνέχεια, η έξοδος δίνεται στον αναλυτή σύνταξης ο οποίος διερευνά εάν τα κουπόνια που δημιουργούνται είναι σε λογική σειρά. Αυτή η έξοδος δίνεται στον σημασιολογικό αναλυτή. Ας υποθέσουμε ότι υπάρχει ένα κομμάτι κώδικα ως p=q + r;

Εδώ, τα p, q είναι ακέραιοι, αλλά το r είναι ένας float. Χρησιμοποιώντας τον σημασιολογικό αναλυτή, η μεταβλητή c ακέραιος μετατρέπεται σε float. Επομένως, κάνει τη σημασιολογική ανάλυση. Η έξοδος του σημασιολογικού αναλυτή πηγαίνει στη γεννήτρια ενδιάμεσου κώδικα. Επιστρέφει έναν ενδιάμεσο κωδικό που στη συνέχεια πηγαίνει στο code optimizer. Η βελτιστοποίηση κώδικα είναι η διαδικασία εξάλειψης των μη ουσιωδών δηλώσεων προγράμματος χωρίς αλλαγή της έννοιας του πραγματικού πηγαίου κώδικα. Δεν είναι μια υποχρεωτική βελτιστοποίηση, αλλά μπορεί να βελτιώσει το χρόνο εκτέλεσης του κώδικα προορισμού. Η έξοδος του βελτιστοποιητή κώδικα δίνεται στη γεννήτρια κώδικα και, τέλος, δημιουργείται ο κώδικας προορισμού.

Διαφορά μεταξύ της βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και της βελτιστοποίησης κώδικα
Διαφορά μεταξύ της βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και της βελτιστοποίησης κώδικα
Διαφορά μεταξύ της βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και της βελτιστοποίησης κώδικα
Διαφορά μεταξύ της βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και της βελτιστοποίησης κώδικα

Εικόνα 01: Φάσεις του μεταγλωττιστή

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

Τι είναι η Βελτιστοποίηση Κώδικα Ανεξάρτητη από Μηχανή;

Όταν η βελτιστοποίηση γίνεται στον ενδιάμεσο κώδικα, ονομάζεται βελτιστοποίηση κώδικα ανεξάρτητα από τη μηχανή. Υπάρχουν διαφορετικές τεχνικές για την επίτευξη βελτιστοποίησης κώδικα ανεξάρτητα από τη μηχανή. Περιγράφονται χρησιμοποιώντας τα ακόλουθα παραδείγματα.

Διαβάστε τις παρακάτω γραμμές κώδικα.

για (j=0; j<10; j ++) {

b=x+2;

a[j]=5 j;

}

Σύμφωνα με τον παραπάνω κωδικό, το b=x+2 υπολογίζεται ξανά και ξανά σε κάθε επανάληψη. Μόλις υπολογιστεί το b, δεν αλλάζει. Έτσι, αυτή η γραμμή μπορεί να τοποθετηθεί έξω από τον βρόχο ως εξής.

b=x+2;

για (j=0; j< 10; j++)

{a[j]=5j;

}

Αυτό ονομάζεται κίνηση κώδικα.

Διαβάστε τις παρακάτω γραμμές κώδικα.

j=5;

if (j==10) {

a=b+20;

}

Σύμφωνα με τον παραπάνω κώδικα, το "if block" δεν θα εκτελεστεί ποτέ επειδή η τιμή j δεν θα είναι ποτέ ίση με 10. Έχει ήδη αρχικοποιηθεί στην τιμή 5. Επομένως, αυτό το μπλοκ if μπορεί να αφαιρεθεί. Αυτή η τεχνική είναι η εξάλειψη νεκρού κώδικα.

Μια άλλη μέθοδος είναι η μείωση της δύναμης. Οι αριθμητικές πράξεις όπως ο πολλαπλασιασμός απαιτούν περισσότερη μνήμη, χρόνο και κύκλους CPU. Αυτές οι ακριβές εκφράσεις μπορούν να αντικατασταθούν από φτηνές εκφράσεις όπως b=a2; ή μπορεί να αντικατασταθεί από πρόσθεση, b=a + a;

Ανατρέξτε στον παρακάτω κωδικό.

for (j=1; j <=5; j ++) {

τιμή=j5;

}

Αντί του πολλαπλασιασμού, ο κωδικός μπορεί να αλλάξει ως εξής.

int temp=5;

για (j=1; j<=5; j++) {

θερμοκρασία=θερμοκρασία + 5;

τιμή=θερμοκρασία;

}

Είναι δυνατό να αξιολογηθούν οι εκφράσεις που είναι σταθερές κατά το χρόνο εκτέλεσης. Ονομάζεται σταθερή αναδίπλωση. Μπορεί να δηλωθεί όπως b[j+1]=c [j+1];

Αντίθετα, μπορεί να αλλάξει ως εξής.

n=j +1;

b[n]=γ[n];

Μπορεί να υπάρχουν βρόχοι ως εξής.

για (j=0; j<5; j++) {

printf("a\n");

}

για (j=0; j <5; j++) {

printf("b\n");

}

Εκτύπωση a και b, και τα δύο έχουν τον ίδιο αριθμό επαναλήψεων. Και τα δύο μπορούν να συνδυαστούν σε ένα βρόχο for ως εξής.

για (j=0; j <5; j++) {

printf("a \n");

printf("b\n");

}

Μια άλλη σημαντική τεχνική είναι η εξάλειψη κοινής υποέκφρασης. Είναι η αντικατάσταση των πανομοιότυπων παραστάσεων με μία μόνο μεταβλητή για να γίνει ο υπολογισμός. Ανατρέξτε στον παρακάτω κωδικό.

a=bc + k;

d=b c + m;

Αυτός ο κωδικός μπορεί να μετατραπεί ως εξής.

temp=bc;

a=θερμοκρασία + k;

d=θερμοκρασία + m;

Δεν απαιτείται ο υπολογισμός του bc ξανά και ξανά. Η πολλαπλασιασμένη τιμή μπορεί να αποθηκευτεί σε μια μεταβλητή και να χρησιμοποιηθεί ξανά.

Ποια είναι η ομοιότητα μεταξύ της βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και της βελτιστοποίησης κώδικα;

Και τα δύο ανήκουν στο Code Optimization

Ποια είναι η διαφορά μεταξύ της βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και της βελτιστοποίησης κώδικα;

Εξάρτηση από μηχανή έναντι βελτιστοποίησης κώδικα ανεξάρτητου από μηχανή

Η βελτιστοποίηση κώδικα που εξαρτάται από τη μηχανή εφαρμόζεται στον κώδικα αντικειμένου. Η βελτιστοποίηση κώδικα ανεξάρτητη από μηχανή εφαρμόζεται στον ενδιάμεσο κώδικα.
Συμμετοχή με το υλικό
Η βελτιστοποίηση που εξαρτάται από τη μηχανή περιλαμβάνει καταχωρητές CPU και απόλυτες αναφορές μνήμης. Η βελτιστοποίηση κώδικα ανεξάρτητη από μηχανή δεν περιλαμβάνει καταχωρητές CPU ή απόλυτες αναφορές μνήμης.

Σύνοψη – Εξαρτώμενη από μηχανή έναντι Βελτιστοποίηση κώδικα ανεξάρτητη από μηχανή

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

Λήψη της έκδοσης PDF του Machine Dependent vs Machine Independent Code Optimization

Μπορείτε να κατεβάσετε την έκδοση PDF αυτού του άρθρου και να τη χρησιμοποιήσετε για σκοπούς εκτός σύνδεσης σύμφωνα με τη σημείωση παραπομπής. Κάντε λήψη της έκδοσης PDF εδώ Διαφορά μεταξύ της βελτιστοποίησης κώδικα που εξαρτάται από τη μηχανή και της βελτιστοποίησης κώδικα ανεξάρτητου από τη μηχανή

Συνιστάται: