Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Utilizare inline  (Citit de 2918 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Bit_Master
Vorbaret
****

Karma: -49
Deconectat Deconectat

Mesaje: 159



Vezi Profilul
« : Decembrie 14, 2010, 20:28:32 »

Cand nu poti pune o functie inline in C (si C++)?

Merge la functii recursive?
Memorat
scipianus
Nu mai tace
*****

Karma: 129
Deconectat Deconectat

Mesaje: 345



Vezi Profilul
« Răspunde #1 : 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)  Smile
Memorat
andrei-alpha
Client obisnuit
**

Karma: 103
Deconectat Deconectat

Mesaje: 91



Vezi Profilul
« Răspunde #2 : Ianuarie 09, 2011, 15:54:36 »

Merge sa delcari pentru orice functie chiar daca e recursiva sau contine instructiuni repetitive.  Smile
Memorat
CezarMocan
Nu mai tace
*****

Karma: 252
Deconectat Deconectat

Mesaje: 567



Vezi Profilul
« Răspunde #3 : Ianuarie 09, 2011, 20:00:30 »

Se poate, dar nu cred ca are vreun efect.
Memorat
mathboy
Moderatori infoarena
Nu mai tace
*****

Karma: 150
Deconectat Deconectat

Mesaje: 259



Vezi Profilul
« Răspunde #4 : Ianuarie 09, 2011, 21:39:14 »

Cezar, tin sa te contrazic Smile.
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.
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #5 : 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).
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #6 : 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)
Memorat
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #7 : 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 Smile
« Ultima modificare: Ianuarie 10, 2011, 16:17:13 de către Bogdan-Cristian Tataroiu » Memorat
Bit_Master
Vorbaret
****

Karma: -49
Deconectat Deconectat

Mesaje: 159



Vezi Profilul
« Răspunde #8 : 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)?
« Ultima modificare: Ianuarie 17, 2011, 20:11:56 de către Alexandru-Iancu Caragicu » Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines