infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Alexandru-Iancu Caragicu din Decembrie 14, 2010, 20:28:32



Titlul: Utilizare inline
Scris de: Alexandru-Iancu Caragicu din Decembrie 14, 2010, 20:28:32
Cand nu poti pune o functie inline in C (si C++)?

Merge la functii recursive?


Titlul: Răspuns: Utilizare inline
Scris de: FMI Ciprian Olariu din Ianuarie 09, 2011, 15:50:38
din cate stiu eu poti declara o functie inline numai daca nu are in ea instructiuni repetitive(for,while,do-while)  :)


Titlul: Răspuns: Utilizare inline
Scris de: Andrei-Bogdan Antonescu din Ianuarie 09, 2011, 15:54:36
Merge sa delcari pentru orice functie chiar daca e recursiva sau contine instructiuni repetitive.  :)


Titlul: Răspuns: Utilizare inline
Scris de: Cezar Mocan din Ianuarie 09, 2011, 20:00:30
Se poate, dar nu cred ca are vreun efect.


Titlul: Răspuns: Utilizare inline
Scris de: Dragos-Alin Rotaru din Ianuarie 09, 2011, 21:39:14
Cezar, tin sa te contrazic :).
Dovada:
http://infoarena.ro/job_detail/507386 - sursa de 80 cu functii declarate void()
http://infoarena.ro/job_detail/507391 - sursa de 100, singurele diferente dintre cele doua surse fiind inline void () in loc de void () unde se putea pune.


Titlul: Răspuns: Utilizare inline
Scris de: Savin Tiberiu din Ianuarie 10, 2011, 15:17:55
Zice bine Cezar. El se referea la faptul ca in cazul functiilor recursive nu are nici un efect. Inline poti in principiu sa il pui la orice tip de functie doar ca nu intotdeauna va avea si efect. Prin inline compilatorul va incerca sa copieze codul functiei acolo unde e apelata, eliminand astfel overheadul creat de apelul functiei (overheadul asta e mic insa daca apelezi de 1 milion de ori functia maxim(a, b) o sa conteze). Problema e ca in cazul anumitor functii (din pacate nu stiu exact conditiile) compilatorul va ignora acel inline pentru ca nu poate copia codul acolo (cum e cazul functiilor recursive). Pare destul de bine explicat aici care e smenu cu functiile astea http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.3 (nu am gasit insa si conditiile ca acel inline sa aibe efect).


Titlul: Răspuns: Utilizare inline
Scris de: Mircea Dima din Ianuarie 10, 2011, 15:55:42
Multe compilatoare optimizeaza inline si functiile recursive. Stiu ca de multe ori am implementat ceva recursiv (back, dfs, segment trees) si cu inline erau mai rapide.
Am impresia ca fiecare compilator are conditiile lui pentru a exapanda inline o functie (pentru ca nu e specificat in standard)


Titlul: Răspuns: Utilizare inline
Scris de: Bogdan-Cristian Tataroiu din Ianuarie 10, 2011, 16:08:23
Din cate stiu, gcc expandeaza inline functiile recursive pana la o anumita adancime care se poate configura printr-un argument la compilator. Nu am verificat asta, s-ar putea sa gresesc :)


Titlul: Răspuns: Utilizare inline
Scris de: Alexandru-Iancu Caragicu din Ianuarie 17, 2011, 20:06:28
Deci nu exista nici un dezavantaj in a pune o functie inline?
De aceea in C# nu exista inline? Il pune automat oricum pentru ca n-ar avea nici un motiv sa nu-l puna?

___________________________

M-am mai uitat pe topicul acela si am inteles ca sunt posibile toate variantele de a fi bun/rau? E vreo recomandare generala (pt problemele de la concursuri)?