Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: variabila globala vs variabila locala  (Citit de 8797 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
EmanuelAchirei
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« : Februarie 03, 2011, 10:28:19 »

Initial am declarat intr-un program vectorul v[700000] local.
La rularea programului am primit eroare cum ca am depasit limita.
Vazand ca nu ii dau de capat,am declarat vectorul global si de data aceasta a mers.
Care e diferenta?
Mentionez ca nu sunt si alte subprograme in sursa.
Memorat
Prostu
Nu mai tace
*****

Karma: 134
Deconectat Deconectat

Mesaje: 323



Vezi Profilul
« Răspunde #1 : Februarie 03, 2011, 11:36:25 »

Variabilele globale se declara intr-o zona program. Aceasta zona este alocata la executarea programului si ramane in aceiasi structura pe toata durata executiei. In aceasta zona poti declara cat ii este permis programului.

Variabilele locale sunt declarate pe 'stiva' programului. Aceasa zona este relativ dinamica, la intrarea intr-un bloc de executie se pun pe stiva informatiile blocului iar apoi la intalnirea intructiunilor declarative se rezerva loc in capul stivei. La iesirea din blocul de executie se scot din stiva toate datele sale. Stiva are o limita de memorie separata de multe ori, dar depinde de sistemul de operare. Pana acum cativa ani limita implicita pentru stiva in linux era de 4 MB si puteai sa o setezi cat de mare voiai. In ultimele versiune de kernel nu mai stiu care e situatia, pentru ca am impresia ca nu mai ai control asa clar asupra ei.
Memorat
EmanuelAchirei
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #2 : Februarie 03, 2011, 12:52:39 »

Si deci ar fi mai avantajos ca la fiecare program sa declar variabilele global?
Memorat
scipianus
Nu mai tace
*****

Karma: 129
Deconectat Deconectat

Mesaje: 345



Vezi Profilul
« Răspunde #3 : Februarie 03, 2011, 14:10:04 »

Si deci ar fi mai avantajos ca la fiecare program sa declar variabilele global?

De fapt explicatia lui Filip Stefan nu o prea inteleg asa de bine,oricum nu e cea mai potrivita ca argument.
Treaba sta in felul urmator:
1.tu la o problema la un concurs ai data o limita de memorie de tipul memorie totala/memorie stiva,de exemplu 2mb/1mb sau 16mb/1mb (ce vreau sa spun e ca in general stiva e 1mb)
2.in acea memorie de stiva intra practic ce ai declarat tu in functia main
3.deci declararea vectorilor in main are 2 dezavantaje,anume ca in primul rand depasesti acea memorie pentru stiva in majoritatea problemelor(vei primi kill by signed 11 de regula),deoarece ai nevoie de vectori mari,iar in al doilea rand daca declari vectorul local in main,atunci va trebui sa-l initializezi tu dupa cu 0 peste tot(daca era declarat global era deja initializat peste tot cu 0)  wink
4.totusi nu este bine sa declari orice variabila globala,adica vectorii da,dar variabilele,ar trebui declarate astfel : cele importante pe care le citesti tu din fisierul de intrare,le declari globale(pentru a le folosi eventual mai usor la subprograme),iar restul intermediare si cele pentru fisierul de iesire local ; asta deoarece tot ce este declarat local se afla pe stiva si este cu mult mai rapid decat ce este global,asa ca este foarte prost sa lucrezi cu toate variabilele globale  wink

Deci tine minte asa :
1. VECTORII MEREU GLOBAL (bineinteles la fel si matricele sau orice alt tablou)
2. VARIABILELE IMPORTANTE GLOBAL SI RESTUL LOCAL

Sper ca ai inteles ce vreau sa zic  Very Happy

Memorat
EmanuelAchirei
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #4 : Februarie 03, 2011, 16:20:46 »

Multumesc mult de explicatiile aduse aici... Very Happy
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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