folosind VariablesEdit
vizibilitatea și durata de viață a variabilelor VariablesEdit
pot avea vizibilitate sau domeniu de aplicare diferite, în funcție de modul în care sunt declarate și utilizate. Domeniul de aplicare se referă la capacitatea de a accesa conținutul unei anumite variabile la un anumit punct al programului.
De obicei, domeniul de aplicare al unei variabile este determinat de blocul său de închidere. Un bloc poate fi inclus în mod explicit în unele limbi (begin/end, {/} perechi), în timp ce în altele blocul este implicit.
aproape toate limbile au un domeniu general de delimitare și, dacă un program declară o variabilă în acest domeniu, este cunoscut ca o variabilă globală.
o variabilă locală, prin contrast, este una care este doar vizibilă, sau „în scop”, în blocul său.
luați în considerare acest cod:
integer globalVariableglobalVariable = 5begin integer localVariable localVariable = 7 globalVariable = 8endlocalVariable = 3 /* <-- this is a syntax error */
variabila globală este declarată în afara oricărui bloc, deci este în domeniul global (implicit), făcându-l o variabilă globală. variabila locală este declarată în blocul de început/sfârșit, limitându-și domeniul de aplicare la acel bloc.
variabila globalVariable începe ca 5, i se atribuie 8 în bloc și iese ca 8. Variabila localVariable este atribuită 7, apoi iese din domeniul de aplicare înainte de a fi atribuit ilegal 3. Nu există o variabilă localvariabilă la acest nivel.
durata de viață a unei variabile vă spune când variabila este activă. În exemplul precedent, o variabilă globală este creată la începutul programului și are o durată de viață egală cu durata programului. Pentru localVariable, nu este creat decât după ce blocul începe Directiva. Viața sa se termină când programul trece Directiva finală.
alocarea memoriei Dinamiceedit
multe programe au scopuri foarte specifice și au nevoie de zone foarte specifice și mici pentru memorie. Dacă scriem un program pentru citirea fișierelor imagine, nu suntem siguri cât de mari ar putea fi imaginile. Unele ar putea fi sute de megabytes, în timp ce unele ar putea fi kilobytes sau mai puțin. Alocarea a sute de megaocteți care nu sunt necesari ar face ca programul să fie dificil de rulat pe unele computere, în timp ce alocarea prea puțină memorie ar însemna că există unele imagini pe care nu le putem gestiona.
o abordare bună a acestei probleme este alocarea memoriei după cum este necesar. Aceasta se numește alocare dinamică a memoriei. Pur și simplu cerem cât avem nevoie în timp ce programul rulează (mai degrabă decât la momentul compilării), nici mai mult, nici mai puțin. În exemplul nostru, acest lucru ne-ar permite să edităm atât fișiere de imagine uriașe, cât și mici, într-un mod eficient și eficient. Există o oarecare complexitate adăugată, deoarece nu mai este limba care se ocupă de detaliile alocării, ci direct de noi. În exemplul nostru, dacă rulăm pe un computer de capăt inferior, este posibil să nu existe suficientă memorie pentru a găzdui fișiere de imagine mari, așa că trebuie să detectăm (și, eventual, să eșuăm cu grație) în astfel de situații.
alocarea dinamică a memoriei este o sursă principală de „pierderi de memorie”, unde programele alocă, utilizează și apoi se fac cu o zonă de memorie, dar nu reușesc să o marcheze ca fiind disponibilă din nou. Aceste probleme pot fi greu de urmărit, deoarece, spre deosebire de alte erori, scurgerile nu sunt ușor evidente.
unele limbi moderne au mecanisme încorporate pentru a încerca să prevină scurgerile de memorie, cunoscute sub numele de colectarea gunoiului. Acest sistem ține evidența a ceea ce alocarea este utilizat în cazul în care, atunci când este în afara domeniului de aplicare. Colectarea gunoiului are o ușoară penalizare de performanță, dar acum este considerată în mod obișnuit ca progres. Java și Python, de exemplu, au un colector de gunoi.