Asosiy farq – mashinaga bogʻliq va mashinadan mustaqil kod optimallashtirish
Kompyuter dasturlari - bu apparat vositalariga topshiriqlarni bajarish uchun berilgan ko'rsatmalar to'plami. Bu dasturlar asosan yuqori darajadagi tillarda yoziladi va kompyuter bu tilni tushunmaydi. Shuning uchun kompilyator ushbu ko'rsatmalarni mashina kodiga yoki maqsadli kodga aylantirish uchun ishlatiladi. Maqsadli kodni yaratish uchun u bir necha bosqichlardan o'tadi. Kodni optimallashtirish ulardan biri. Mashinaga bog'liq va mashinadan mustaqil kodni optimallashtirish kabi ikkita optimallashtirish texnikasi mavjud. Mashinaga bog'liq va mashinadan mustaqil kodni optimallashtirish o'rtasidagi asosiy farq shundaki, mashinaga bog'liq optimallashtirish ob'ekt kodiga, mashinadan mustaqil kod optimallashtirish esa oraliq kodga qo'llaniladi.
Mashinaga bogʻliq kodni optimallashtirish nima?
Manba kodini ob'ekt kodi yoki maqsadli kodga aylantirishda kompilyator bir necha bosqichlardan o'tadi. Birinchidan, manba kodi tokenlarni ishlab chiqaradigan leksik analizatorga beriladi. Keyin, hosil qilingan tokenlarning mantiqiy tartibda yoki yo'qligini tekshiradigan sintaksis analizatoriga chiqish beriladi. Bu chiqish semantik analizatorga beriladi. P=q + r; kabi kod bo'lagi bor deb faraz qilaylik.
Bu yerda p, q butun sonlar, lekin r floatdir. Semantik analizator yordamida c butun o'zgaruvchisi floatga aylantiriladi. Shuning uchun u semantik tahlilni amalga oshiradi. Semantik analizatorning chiqishi Oraliq kod generatoriga boradi. U oraliq kodni qaytaradi va keyin kod optimallashtiruvchisiga o'tadi. Kodni optimallashtirish - bu haqiqiy manba kodining ma'nosini o'zgartirmasdan muhim bo'lmagan dastur bayonotlarini yo'q qilish jarayoni. Bu majburiy optimallashtirish emas, lekin maqsadli kodning ishlash vaqtini yaxshilashi mumkin. Kod optimallashtiruvchining chiqishi kod generatoriga beriladi va nihoyat maqsadli kod tuziladi.
01-rasm: Kompilyatorning bosqichlari
Mashinaga bog'liq kodni optimallashtirishda optimallashtirish manba kodiga qo'llaniladi. Etarli miqdorda resurslarni ajratish ushbu optimallashtirishda dasturning bajarilishini yaxshilashi mumkin.
Mashinadan mustaqil kod optimallashtirish nima?
Oraliq kodda optimallashtirish amalga oshirilsa, u mashinadan mustaqil kod optimallashtirish deb ataladi. Mashinadan mustaqil kodni optimallashtirishga erishish uchun turli xil texnikalar mavjud. Ular quyidagi misollar yordamida tasvirlangan.
Quyidagi kod qatorlarini oʻqing.
uchun (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
Yuqoridagi kodga muvofiq, b=x+2 har bir iteratsiyada qayta-qayta hisoblab chiqiladi. b hisoblangandan keyin u o'zgarmaydi. Shunday qilib, bu qatorni tsikldan tashqarida quyidagicha joylashtirish mumkin.
b=x+2;
uchun (j=0; j< 10; j++)
{a[j]=5j;
}
Bu kod harakati deyiladi.
Quyidagi kod qatorlarini oʻqing.
j=5;
agar (j==10) {
a=b+20;
}
Yuqoridagi kodga ko'ra, "if blok" hech qachon bajarilmaydi, chunki j qiymati hech qachon 10 ga teng bo'lmaydi. U allaqachon 5 qiymatiga ishga tushirilgan. Shuning uchun, bu if blokini olib tashlash mumkin. Bu usul oʻlik kodni yoʻq qiladi.
Boshqa usul - quvvatni pasaytirish. Ko'paytirish kabi arifmetik operatsiyalar ko'proq xotira, vaqt va protsessor davrlarini talab qiladi. Bu qimmat iboralar b=a2 kabi arzon iboralar bilan almashtirilishi mumkin; yoki qo'shimcha bilan almashtirilishi mumkin, b=a + a;
Quyidagi kodga qarang.
uchun (j=1; j <=5; j ++) {
qiymat=j5;
}
Koʻpaytirish oʻrniga kodni quyidagicha oʻzgartirish mumkin.
int temp=5;
uchun (j=1; j<=5; j++) {
temp=temp + 5;
qiymat=temp;
}
Ishlash vaqtida doimiy bo'lgan ifodalarni baholash mumkin. U doimiy katlama deb ataladi. b[j+1]=c [j+1]; kabi ifodalanishi mumkin
Oʻrniga uni quyidagicha oʻzgartirish mumkin.
n=j +1;
b[n]=c[n];
Quyidagicha koʻchadan boʻlishi mumkin.
uchun (j=0; j<5; j++) {
printf(“a\n”);
}
uchun (j=0; j <5; j++) {
printf(“b\n”);
}
A va b chop etish, ikkalasida ham bir xil takrorlashlar soni mavjud. Ikkalasini ham quyidagi tarzda bitta for tsikliga birlashtirish mumkin.
uchun (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
Yana bir muhim usul - Umumiy pastki ifodani yo'q qilish. Hisoblash uchun bir xil ifodalarni bitta o'zgaruvchiga almashtirish kerak. Quyidagi kodga qarang.
a=bc + k;
d=b c + m;
Ushbu kodni quyidagi tarzda aylantirish mumkin.
temp=bc;
a=temp + k;
d=temp + m;
Bc ni qayta-qayta hisoblash shart emas. Ko'paytirilgan qiymat o'zgaruvchida saqlanishi va qayta ishlatilishi mumkin.
Mashinaga bogʻliq va mashinadan mustaqil kodni optimallashtirish oʻrtasidagi oʻxshashlik nimada?
Bularning ikkalasi ham Optimization kodiga tegishli
Mashinaga bogʻliq va mashinadan mustaqil kod optimallashtirish oʻrtasidagi farq nima?
Mashinaga bogʻliq va mashinadan mustaqil kod optimallashtirish |
|
Mashinaga bogʻliq kodni optimallashtirish obyekt kodiga qoʻllaniladi. | Mashinadan mustaqil kod optimallashtirish oraliq kodga qoʻllaniladi. |
Uskuna bilan ishtirok | |
Mashinaga bogʻliq optimallashtirish protsessor registrlari va mutlaq xotira havolalarini oʻz ichiga oladi. | Mashinadan mustaqil kod optimallashtirish protsessor registrlari yoki mutlaq xotira havolalarini oʻz ichiga olmaydi. |
Xulosa – Mashinaga bogʻliq va mashinadan mustaqil kod optimallashtirish
Kodni optimallashtirish ikkita optimallashtirish usulidan iborat: mashinaga bogʻliq va mashinadan mustaqil kod optimallashtirish. Mashinaga bog'liq va mashinadan mustaqil kod optimallashtirish o'rtasidagi farq shundaki, mashinaga bog'liq optimallashtirish ob'ekt kodiga qo'llaniladi, mashinadan mustaqil kod optimallashtirish esa oraliq kodga qo'llaniladi.
Mashinaga bogʻliq va mashinadan mustaqil kod optimallashtirishning PDF versiyasini yuklab oling
Siz ushbu maqolaning PDF-versiyasini yuklab olishingiz va iqtibos keltirgan holda oflayn maqsadlarda foydalanishingiz mumkin. Iltimos, PDF versiyasini bu yerdan yuklab oling Mashinaga bog'liq va mashinadan mustaqil kod optimallashtirish o'rtasidagi farq