Ładny brzuch
Chciaem przetestowa w prostym programiku, czy po uyciu w pewnej funkcji
dyrektywy inline bdzie ona "wbudowana" w kod. Nic z tego po zdezasemblowaniu programu nadal wida, e wywouje ona dan funkcj. Dlaczego si tak dzieje? Jeszcze jedno pytanie: co daje uycie inline w metodach klasy?
IMHO (przynajmniej u mnie tak jest) jak kompilujesz to musisz uy opytymlizacji (2) -O2 :D
Kodie
jaki kompilator?
czesto trzeba w opcjach kompilacji zmienic aby nie ignorowal inline, bo defaultowo w trybie debug dla wygody tak sobie kompilator robi.
uzycie inline w metodach klasy daje to samo ;) czyli jesli masz klase dummy i obiekt d tej klasy: dummy d; i jesli w kodzie programu wywolujesz metode ktora jest inline:
int x = d.getX();
gdzie getX wyglada na przyklad tak:
inline int getX(){
return X;
}
to w kodzie skompilowanego programu nie bedzie wywoalania metody getX przez call zwrocenia wartosci przez stos i powrotu z wywolania, tylko bezposredni odczyt z komorki pamieci, w ktorej lezy X. jesli taka funkcje wywolujesz 10^20 razy to zysk jest dosc konkretny :]
nie wszystkie funkcje moga byc inline, z nie wszystkimi sobie konkretny kompilator moze poradzic, wtedy pewnie dostaniesz warninga ze dana funkcja nie moze byc inline bo...
pozdrawiam
pepsi^no1
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
dyrektywy inline bdzie ona "wbudowana" w kod. Nic z tego po zdezasemblowaniu programu nadal wida, e wywouje ona dan funkcj. Dlaczego si tak dzieje? Jeszcze jedno pytanie: co daje uycie inline w metodach klasy?
IMHO (przynajmniej u mnie tak jest) jak kompilujesz to musisz uy opytymlizacji (2) -O2 :D
Kodie
jaki kompilator?
czesto trzeba w opcjach kompilacji zmienic aby nie ignorowal inline, bo defaultowo w trybie debug dla wygody tak sobie kompilator robi.
uzycie inline w metodach klasy daje to samo ;) czyli jesli masz klase dummy i obiekt d tej klasy: dummy d; i jesli w kodzie programu wywolujesz metode ktora jest inline:
int x = d.getX();
gdzie getX wyglada na przyklad tak:
inline int getX(){
return X;
}
to w kodzie skompilowanego programu nie bedzie wywoalania metody getX przez call zwrocenia wartosci przez stos i powrotu z wywolania, tylko bezposredni odczyt z komorki pamieci, w ktorej lezy X. jesli taka funkcje wywolujesz 10^20 razy to zysk jest dosc konkretny :]
nie wszystkie funkcje moga byc inline, z nie wszystkimi sobie konkretny kompilator moze poradzic, wtedy pewnie dostaniesz warninga ze dana funkcja nie moze byc inline bo...
pozdrawiam
pepsi^no1