Рачунарски програми су скуп упутстава која се дају хардверу, за обављање задатака. Ови програми су углавном написани на језицима високог нивоа, а рачунар тај језик не разуме. Стога се преводилац користи за претварање тих упутстава у машински код или циљни код. Пролази кроз неколико фаза да би се створио циљни код. Оптимизација кода је један од њих. Постоје две технике оптимизације као што су машинска зависност и машинска независна оптимизација кода. Тхе кључна разлика Између машинске и неовисне оптимизације кода машине зависи од тога машинска зависна оптимизација се примењује на објектни код док се на независном коду машине примењује независна оптимизација кода.
1. Преглед и кључне разлике
2. Шта је машинско зависна оптимизација
3. Шта је неовисна машинска оптимизација
4. Сличности између машине овисне о строју и неовисне оптимизације кода
5. Упоредна упоредба - Овисно о стројевима и неовисној оптимизацији кода у табеларном облику
6. Резиме
Приликом претварања изворног кода у објектни код или циљни код, преводилац пролази кроз неколико фаза. Прво се изворни код даје Лексичком анализатору који производи токене. Затим се излаз даје анализу синтаксе који истражује да ли су генерисани токени у логичком редоследу. Тај се излаз даје семантичком анализатору. Претпоставимо да постоји део кода као п = к + р;
Овде су п, к цели бројеви, али р је флоат. Помоћу семантичког анализатора, цела варијабла ц се претвара у флоат. Стога то ради семантичка анализа. Излаз семантичког анализатора одлази у генератор средњег кода. Враћа средњи код који затим прелази у алат за оптимизацију кода. Оптимизација кода је процес елиминације небитних изјава програма без промене значења стварног изворног кода. То није обавезна оптимизација, али може побољшати време извођења циљног кода. Излаз оптимизатора кода даје се генератору кода, и на крају се уграђује циљни код.
Слика 01: Фазе компајлера
У машинској оптимизацији кода оптимизација се примењује на изворни код. Алокација довољне количине ресурса може побољшати извршење програма у овој оптимизацији.
Када се оптимизација врши на средњем коду, то се назива машински независна оптимизација кода. Постоје различите технике за постизање машинске независне оптимизације кода. Они су описани следећим примерима.
Прочитајте следеће редове кода.
за (ј = 0; ј<10; j ++)
б = к + 2;
а [ј] = 5 * ј;
Према горе наведеном коду, б = к + 2 се израчунава изнова и изнова у свакој итерацији. Једном када се б израчуна, не мења се. Дакле, ова линија се може поставити изван петље на следећи начин.
б = к + 2;
за (ј = 0; ј< 10; j++)
а [ј] = 5 * ј;
То се назива кретање кода.
Прочитајте следеће редове кода.
ј = 5;
ако је (ј == 10)
а = б + 20;
Према горњем коду, „ако блок“ се никада неће извршити јер ј вредност никада неће бити једнака 10. Већ је иницијализирана на вредност 5. Дакле, овај блок може бити уклоњен. Ова техника је уклањање мртвог кода.
Друга метода је смањење снаге. Аритметичке операције попут множења захтевају више меморије, времена и ЦПУ циклуса. Ови скупи изрази могу се заменити јефтиним изразима попут б = а * 2; или се може заменити сабирањем, б = а + а;
Погледајте доњи код.
за (ј = 1; ј <= 5; j ++)
вредност = ј * 5;
Уместо множења, код се може променити на следећи начин.
инт темп = 5;
за (ј = 1; ј<=5; j++)
темп = темп + 5;
вредност = темп;
Могуће је проценити изразе који су константе током извођења. Зове се стално савијање. Може се навести као што је б [ј + 1] = ц [ј + 1];
Уместо тога, може се мењати на следећи начин.
н = ј +1;
б [н] = ц [н];
Могу бити петље на следећи начин.
за (ј = 0; ј<5; j++)
принтф („а \ н“);
за (ј = 0; ј <5; j++)
принтф („б \ н“);
Оба штампања а и б имају исти број понављања. Обе се могу комбиновати у једну за петљу на следећи начин.
за (ј = 0; ј <5; j++)
принтф („а \ н“);
принтф („б \ н“);
Друга важна техника је Уобичајено уклањање суб израза. То је замјена идентичних израза са једном променљивом да бисте извршили прорачун. Погледајте доњи код.
а = б * ц + к;
д = б * ц + м;
Овај код се може претворити на следећи начин.
темп = б * ц;
а = темп + к;
д = темп + м;
Није потребно израчунати б * ц изнова и изнова. Помножена вриједност може се похранити у варијаблу и поново употријебити.
Машинска зависност од оптимизације независног кода машине | |
На објектни код примењује се машинско зависна оптимизација. | Машинска независна оптимизација кода примењује се на средњи код. |
Укљученост са хардвером | |
Машинска зависна оптимизација укључује ЦПУ регистре и апсолутне референце у меморији. | Машинска независна оптимизација кода не укључује ЦПУ регистре или апсолутне референце у меморији. |
Оптимизација кода састоји се од две технике оптимизације, наиме, од машине зависне и од машинске независне оптимизације кода. Разлика између оптимизације шифре зависне од машине и машине зависи од тога што се машинска зависност од оптимизације примењује на објектни код, док се на средњи код примењује неовисна машинска оптимизација..
Можете преузети ПДФ верзију овог чланка и користити је за оффлине употребу према напомени. Молимо преузмите ПДФ верзију овде. Разлика између машине и зависности од машине независне оптимизације
1. „Дизајн компајлера | Оптимизација кода. " ГеексфорГеекс. Доступно овде
2.Поинт, Туториалс. „Дизајн компајлера - оптимизација кода.“ Ввв.туториалспоинт.цом, Туториалс Поинт, 15. августа 2017. Доступно овде
3.Естудиес4иоу. "ЈНТУХ ЦСЕ материјале." Разлика између аутоматизиране и независне оптимизације кода. Доступно овде
1. "Компилер" И, Сурацхит, (ЦЦ БИ-СА 3.0) преко Цоммонс Викимедиа