Kezdőlap › Fórumok › Vegyes felvágott › Programfordítások, optimalizáció
- This topic has 126 hozzászólás, 9 résztvevő, and was last updated 18 years, 1 months telt el by
gabaman.
-
SzerzőBejegyzés
-
2007-06-16-09:33 #2118628mmp wrote:Az Os meg igaz, hogy kisebb kódot generál, de olyan mintha tömörített lenne.
Én ebben nem vagyok annyira biztos. Tehát nem kell kitömöríteni, mint pl. régebben, dos alatt különféle exe-röptömörítőkkel. Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.
2007-06-16-09:33 #2118629mmp wrote:Az Os meg igaz, hogy kisebb kódot generál, de olyan mintha tömörített lenne.Én ebben nem vagyok annyira biztos. Tehát nem kell kitömöríteni, mint pl. régebben, dos alatt különféle exe-röptömörítőkkel. Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.
2007-06-16-09:38 #2118630uzsolt wrote:Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.Akkor miért lesz lassabb?
2007-06-16-09:38 #2118631uzsolt wrote:Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.Akkor miért lesz lassabb?
2007-06-16-09:39 #2118632„Az Os meg igaz, hogy kisebb kódot generál, de olyan mintha tömörített lenne. Vagyis gyorsabban betölti a merevlemez, de lassabb és több memóriát igényel”
Ez sem igaz, mert egy optimalizálás nem olyan mint egy tömörítés. Lehet tömöríteni is, de az egy másik tészta.
Itt egy pl. az optimalizálásra:
Én azt a műveletet, hogy ax=0 minimum két módon állíthatom elő:
1) xor ax,ax
2) mov ax,0
A kettes számú jelölt nyílván pont egy byte-tal eredményez hosszabb kódot, amígy egy 32 bites regiszternél ez már 3 byte lesz.
Tehát a fordítónak optimizálás esetén át kell írnia néhány dolgot.
Pl. amikor c-ben kiadod a return 0 parancsot, akkor az emberi szemlélethez közelebb állóCode:mov eax, 0
retkódot úgy fogja megvalósítani, hogy
Code:xor eax,eax
retax: egy 16 bites regiszter
eax: egy 32 bites
mov: =
xor: kizáró vagy kapcsolat
ret/return: visszatérés ahhoz a ponthoz, ahonnan a függvényt meghívták.2007-06-16-09:39 #2118633„Az Os meg igaz, hogy kisebb kódot generál, de olyan mintha tömörített lenne. Vagyis gyorsabban betölti a merevlemez, de lassabb és több memóriát igényel”
Ez sem igaz, mert egy optimalizálás nem olyan mint egy tömörítés. Lehet tömöríteni is, de az egy másik tészta.
Itt egy pl. az optimalizálásra:
Én azt a műveletet, hogy ax=0 minimum két módon állíthatom elő:
1) xor ax,ax
2) mov ax,0
A kettes számú jelölt nyílván pont egy byte-tal eredményez hosszabb kódot, amígy egy 32 bites regiszternél ez már 3 byte lesz.
Tehát a fordítónak optimizálás esetén át kell írnia néhány dolgot.
Pl. amikor c-ben kiadod a return 0 parancsot, akkor az emberi szemlélethez közelebb állóCode:mov eax, 0
retkódot úgy fogja megvalósítani, hogy
Code:xor eax,eax
retax: egy 16 bites regiszter
eax: egy 32 bites
mov: =
xor: kizáró vagy kapcsolat
ret/return: visszatérés ahhoz a ponthoz, ahonnan a függvényt meghívták.2007-06-16-09:45 #2118634„mintha”
optimalizálás során minden olyan optimalizálási eljárást kihagy, ami a méret növekedéséhez vezetne. Ezért lesz lassabb, mert azokat is kihagyja amivel a kód gyorsabban – az adott processzor tulajdonságait kihasználva – végez.2007-06-16-09:45 #2118635„mintha”
optimalizálás során minden olyan optimalizálási eljárást kihagy, ami a méret növekedéséhez vezetne. Ezért lesz lassabb, mert azokat is kihagyja amivel a kód gyorsabban – az adott processzor tulajdonságait kihasználva – végez.2007-06-16-09:46 #2118636mmp wrote:uzsolt wrote:Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.Akkor miért lesz lassabb?
Nem feltétlenül lesz lassabb.
De az előző példánál maradva, ha két regiszter kizáró vagy kapcsolata pl. több órajel ciklus alatt megy végbe, mint egy regiszterbe egy 0 bemásolása (nem egy szám, mert különbözhet*) – ami lehet, hogy így is van (bár nem biztos, elvégre itt két regiszterről van szó**), akkor egy xor ax,ax rövidebb, de lassabb egy mov ax,0-nál.* a bitek átírása idő kérdése
** a regiszter műveletek gyorsabbak, mint a memória műveletek, a xor művelet viszont lassabb, mint a mov. Jelen esetben azonban regiszter, regiszter közötti műveletről van szó.
(Egy xor ax, 28, biztosan lassabb, mint egy mov ax, 28.)2007-06-16-09:46 #2118637mmp wrote:uzsolt wrote:Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.Akkor miért lesz lassabb?
Nem feltétlenül lesz lassabb.
De az előző példánál maradva, ha két regiszter kizáró vagy kapcsolata pl. több órajel ciklus alatt megy végbe, mint egy regiszterbe egy 0 bemásolása (nem egy szám, mert különbözhet*) – ami lehet, hogy így is van (bár nem biztos, elvégre itt két regiszterről van szó**), akkor egy xor ax,ax rövidebb, de lassabb egy mov ax,0-nál.* a bitek átírása idő kérdése
** a regiszter műveletek gyorsabbak, mint a memória műveletek, a xor művelet viszont lassabb, mint a mov. Jelen esetben azonban regiszter, regiszter közötti műveletről van szó.
(Egy xor ax, 28, biztosan lassabb, mint egy mov ax, 28.) -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz