Program komputer adalah arahan yang diberikan kepada perkakasan, untuk melaksanakan tugas. Program-program ini kebanyakannya ditulis dalam bahasa peringkat tinggi, dan komputer tidak memahami bahasa tersebut. Oleh itu, pengkompil digunakan untuk menukar arahan tersebut ke dalam kod mesin atau kod sasaran. Ia melalui beberapa fasa untuk membina kod sasaran. Pengoptimuman kod adalah salah satu daripada mereka. Terdapat dua teknik pengoptimuman seperti, bergantung mesin dan pengoptimuman kod bebas mesin. The perbezaan utama antara mesin bergantung dan mesin pengoptimuman kod bebas adalah bahawa pengoptimuman bergantung mesin digunakan pada kod objek manakala pengoptimuman kod bebas mesin digunakan untuk kod perantaraan.
1. Gambaran Keseluruhan dan Perbezaan Utama
2. Apakah Mesin Pengoptimuman Kod Bergantung
3. Apakah Mesin Pengoptimuman Kod Bebas?
4. Kesamaan Antara Mesin Bergantung dan Mesin Pengoptimuman Kod Bebas
5. Side by Side Comparison - Machine Dependent vs Machine Independent Code Optimization in Form Tabular
6. Ringkasan
Apabila menukarkan kod sumber kepada objek kod atau kod sasaran, pengkompil melaluinya beberapa fasa. Pertama, kod sumber diberikan kepada penganalisa Lexical yang menghasilkan token. Kemudian, output diberikan kepada penganalisis sintaks yang menyiasat sama ada token yang dihasilkan adalah dalam urutan logik. Keluaran itu diberikan kepada penganalisis semantik. Anggapkan bahawa terdapat sekeping kod sebagai p = q + r;
Di sini, p, q adalah bilangan bulat, tetapi r adalah apungan. Menggunakan penganalisis semantik, pemboleh ubah integer c ditukar kepada float. Oleh itu, ia menganalisis semantik. Output penganalisis semantik pergi ke penjana kod Intermediate. Ia mengembalikan kod perantaraan yang kemudiannya menjadi pengoptimal kod. Pengoptimuman kod adalah proses menghapuskan pernyataan program tidak penting tanpa mengubah makna kod sumber sebenar. Ia bukannya mengoptimumkan wajib tetapi, ia boleh meningkatkan masa berjalan kod sasaran. Keluaran pengoptimal kod diberikan kepada penjana kod, dan akhirnya, kod sasaran dibina.
Rajah 01: Fasa Pengkompil
Dalam pengoptimuman kod bergantung mesin, pengoptimuman digunakan untuk kod sumber. Mempunyai jumlah sumber yang mencukupi dapat meningkatkan pelaksanaan program dalam pengoptimuman ini.
Apabila pengoptimuman dilakukan pada kod perantaraan, ia dipanggil pengoptimuman kod bebas mesin. Terdapat teknik yang berbeza untuk mencapai pengoptimuman kod bebas mesin. Mereka digambarkan menggunakan contoh berikut.
Baca di bawah barisan kod.
untuk (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Menurut kod di atas, b = x + 2 dikira lagi dan sekali lagi dalam setiap lelaran. Sekali b dikira, ia tidak berubah. Oleh itu, baris ini boleh diletakkan di luar gelung seperti berikut.
b = x + 2;
untuk (j = 0; j< 10; j++)
a [j] = 5 * j;
Ini dipanggil pergerakan kod.
Baca di bawah barisan kod.
j = 5;
jika (j == 10)
a = b + 20;
Mengikut kod di atas, 'jika blok' tidak akan dilaksanakan kerana nilai j tidak akan sama dengan 10. Ia telah dimulakan pada nilai 5. Oleh itu, ini jika blok boleh dialih keluar. Teknik ini adalah penghapusan kod mati.
Kaedah lain adalah pengurangan kekuatan. Operasi aritmetik seperti pendaraban memerlukan lebih banyak memori, masa, dan kitaran CPU. Ungkapan-ungkapan mahal ini boleh digantikan dengan ungkapan murah seperti b = a * 2; atau boleh digantikan dengan tambahan, b = a + a;
Rujuk kod di bawah.
untuk (j = 1; j <= 5; j ++)
nilai = j * 5;
Daripada pendaraban, kod tersebut boleh diubah seperti berikut.
int temp = 5;
untuk (j = 1; j<=5; j++)
temp = temp + 5;
nilai = temp;
Adalah mungkin untuk menilai ungkapan yang pemalar semasa runtime. Ia dikenali sebagai lipat berterusan. Boleh dinyatakan seperti b [j + 1] = c [j + 1];
Sebaliknya, ia boleh diubah seperti berikut.
n = j +1;
b [n] = c [n];
Terdapat gelung seperti berikut.
untuk (j = 0; j<5; j++)
printf ("a \ n");
untuk (j = 0; j <5; j++)
printf ("b \ n");
Percetakan a dan b, kedua-duanya mempunyai bilangan lelaran yang sama. Kedua-duanya boleh digabungkan dengan satu untuk gelung seperti berikut.
untuk (j = 0; j <5; j++)
printf ("a \ n");
printf ("b \ n");
Satu lagi teknik penting ialah Penyingkiran subpengataan biasa. Ia adalah untuk menggantikan ungkapan yang sama dengan pemboleh ubah tunggal untuk melakukan pengiraan. Rujuk kod bawah.
a = b * c + k;
d = b * c + m;
Kod ini boleh ditukar seperti berikut.
temp = b * c;
a = temp + k;
d = temp + m;
Ia tidak dikehendaki mengira b * c lagi dan lagi. Nilai yang didarabkan boleh disimpan dalam pemboleh ubah dan digunakan semula.
Mesin Bergantung vs Mesin Pengoptimuman Kod Bebas | |
Pengoptimuman kod dependen mesin digunakan untuk kod objek. | Pengoptimuman kod bebas mesin digunakan untuk kod perantaraan. |
Penglibatan dengan Perkakasan | |
Pengoptimuman bergantung pada mesin melibatkan daftar CPU dan rujukan mutlak memori. | Pengoptimuman kod bebas mesin tidak melibatkan daftar CPU atau rujukan memori mutlak. |
Pengoptimuman kod terdiri daripada dua teknik pengoptimuman iaitu mesin bergantung dan pengoptimuman kod bebas mesin. Perbezaan antara mesin bergantung dan pengoptimuman kod mesin bebas ialah pengoptimuman bergantung pada mesin diterapkan pada kod objek sedangkan, pengoptimuman kod bebas mesin digunakan untuk kod perantaraan.
Anda boleh memuat turun versi PDF artikel ini dan menggunakannya untuk tujuan luar talian seperti nota kutipan. Sila muat turun versi PDF di sini Perbezaan Antara Mesin Bergantung dan Mesin Pengoptimuman Kod Bebas
1. "Reka bentuk Compiler | Pengoptimuman Kod. " GeeksforGeeks. Terdapat di sini
2.Point, Tutorial. "Reka bentuk Compiler - Pengoptimuman Kod." Www.tutorialspoint.com, Titik Tutorial, 15 Ogos 2017. Boleh didapati di sini
3.Estudies4you. "Bahan Kajian CSN JNTUH." Perbezaan antara Pengoptimuman Kod Merangkumi Mesin dan Bebas. Terdapat di sini
1.'Kompiler 'Oleh Saya, Surachit, (CC BY-SA 3.0) melalui Wikimedia Commons