Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Diferenta streamuri - functii  (Citit de 2464 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
ucc_5
Client obisnuit
**

Karma: -11
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« : August 08, 2009, 00:21:33 »

Am tot citit pe site ca streamurile sunt mai putin rapide decat functiile de citire. In primul rand nu inteleg de ce e asa. Iar in al doilea rand cu cat sunt mai rapide functiile decat streamurile? Are rost sa invat sa folosesc functii de citire sau raman la streamuri ?
A si ca sa nu uit tot asa am auzit ca alocarea dinamica e mai putina rapida decat alocarea statica sau asa ceva. De ce e asa ? Legat de asta am avut parte de o problema in care daca declaram local (si static) un vector de cateva mii de numere programul era cu 100 ms mai incet decat daca declaram global; care o fi explicatia ?
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #1 : August 08, 2009, 00:42:45 »

Eu am auzit chiar contrariul ...  Think Ca stream-urile sunt mai rapide decat functiile standard.

Eu prefer stream-urile, mi se par mai usore, mai "dragute". (si cu ultimul epitet v-am dat gata ! )  Banana
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #2 : August 08, 2009, 00:50:46 »

Pe ultimul compilator gcc sunt mai rapide streamurile. Cred ca o problema buna sa vezi asta e Subsecventa de suma maxima din arhiva educationala. Legat de a doua intrebare, nu cred ca iti pot da un raspuns destul de bun. Stiu doar ca lucrand direct cu pointeri, se acceseaza mai repede memoria. Alte detalii nu stiu, din pacate. sad

PS: La ONI cred ca nu s-a folosit ultimul compilator gcc, deci erau mai rapide functiile. E bine sa le stii pe ambele si in functie de compilatorul folosit in concurs sa le utilizezi pe cele mai rapide. peacefingers
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #3 : August 08, 2009, 00:52:31 »

Dar cum iti dai seama la concurs care-s cele mai rapide ?  Confused
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #4 : August 08, 2009, 00:55:43 »

Mai nou de gcc 4.2.4 e sigur cu streamuri mai rapide. De exemplu pe .campion s-a folosit gcc 3.2.2, pentru care functiile erau mai rapide. Nu stiu exact de la ce versiune au devenit streamurile mai rapide. Cred ca de la primul gcc 4. Huh
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #5 : August 08, 2009, 09:23:50 »

Dar cum iti dai seama la concurs care-s cele mai rapide ?  Confused


Faci  2 programe care citesc din fisier : una cu streamuri si una cu scanf (si eventual inca una cu parsare Tongue ) si bagi in fisier 1 000 000 de numere random...
si vezi timpul de executie... asta e cea mai buna solutie  (pentru cazul in care compilatorul folosit pe desktopuri e cel pe care se face evaluarea...) Smile
Memorat
ucc_5
Client obisnuit
**

Karma: -11
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« Răspunde #6 : August 08, 2009, 09:36:02 »

Am inteles multumesc de raspunsuri, dar totusi eram curios cum functioneaza streamurile si cum functioneaza functiile de exista si a exista diferenta de timp de executie intre ele.
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #7 : August 08, 2009, 09:49:40 »

Pai inainte sa apara g++ 4  scanf era mai rapid pentru ca tu ii spuneai formatul (adica ce sa citeasca) 

scanf("%d", &n); ...ii spuneai ca citesti un int

pe cand la streamuri:

cin>>n; ... trebuia sa verifice el ce tip e + ca se folosesc clase (OOP) .

Acum.... nu stiu exact ce optimizari au facut de sunt mai rapide streamurile...
Defapt streamurile sunt mai rapide doar la citire... ca la scriere e mai rapid cu printf Tongue.
Iar cel mai rapid e  cu parsare ... indiferent de compilator.
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #8 : August 08, 2009, 11:13:33 »

Eu sunt de parere ca atunci cand programezi in C++ ar trebui sa folosesti stream-uri pentru ca sunt "de-acolo", iar cand programezi in C utilizezi functiile standard.  peacefingers
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #9 : August 08, 2009, 11:29:17 »

Eu sunt de parere ca atunci cand programezi in C++ ar trebui sa folosesti stream-uri pentru ca sunt "de-acolo", iar cand programezi in C utilizezi functiile standard.  peacefingers
Avand in vedere ca la un program este important sa functioneze corect si cat mai rapid, ar trebui sa folosesti functia care viteza cea mai buna. De altfel, cea mai rapida este parsarea citirii, insa uneori este destul de anevoioasa(de ex. in cazul numerelor reale).
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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