Ved Hjelp Av VariablesEdit
Synlighet og Levetid For VariablesEdit
Variabler kan ha forskjellig synlighet, eller omfang, i henhold til hvordan de deklareres og brukes. Omfang refererer til muligheten til å få tilgang til innholdet i en bestemt variabel på et bestemt punkt i programmet.
vanligvis bestemmes en variabels omfang av dens omsluttende blokk. En blokk kan være vedlagt eksplisitt i noen språk (start/slutt, {/} par), mens i andre blokken er implisitt.
Nesten alle språk har et generelt avgrensingsområde, og hvis et program erklærer en variabel i dette området, er det kjent som en global variabel.
en lokal variabel, derimot, er en som bare er synlig, eller «i omfang», innenfor sin blokk.
Vurder denne koden:
integer globalVariableglobalVariable = 5begin integer localVariable localVariable = 7 globalVariable = 8endlocalVariable = 3 /* <-- this is a syntax error */
den globale variabelen er deklarert utenfor en hvilken som helst blokk, så er den i det (implisitte) globale omfanget, noe som gjør den til en global variabel. den lokale variabelen er deklarert i start / slutt-blokken, og begrenser omfanget til den blokken.
Variabel globalvariabel starter som 5, tildeles 8 i blokken og går ut som 8. Variabel localVariable er tildelt 7, deretter går ut av omfang før de blir ulovlig tildelt 3. Det er ingen variabel lokalvariabel på dette nivået.
levetiden til en variabel forteller deg når variabelen er aktiv. I det foregående eksemplet opprettes en global variabel ved starten av programmet og har en levetid som er lik programmets lengde. For localVariable, er det ikke opprettet før like etter at blokken begynner direktivet. Dens liv er over når programmet passerer sluttdirektivet.
Dynamic memory allocationEdit
mange programmer har svært spesifikke formål og trenger svært spesifikke og små områder for minne. Hvis vi skrev et program for å lese bildefiler, er vi ikke sikre på nøyaktig hvor store bildene kan være. Noen kan være hundrevis av megabyte, mens noen kan være kilobyte eller mindre. Tildeling av hundrevis av megabyte som ikke er nødvendig, ville gjøre programmet vanskelig å kjøre på noen datamaskiner mens tildeling av for lite minne ville bety at det er noen bilder vi ikke kan håndtere.
en god tilnærming til dette problemet er å tildele minne etter behov. Dette kalles Dynamisk minneallokering. Vi ber bare om så mye som vi trenger mens programmet kjører (i stedet for kompileringstid), ikke mer og ikke mindre. I vårt eksempel vil dette la oss redigere både store og små bildefiler på en effektiv og effektiv måte. Det er noe ekstra kompleksitet siden det ikke lenger er språket som håndterer detaljene for allokering, men oss direkte. I vårt eksempel, hvis vi kjører på en nedre datamaskin, kan det ikke være nok minne til å imøtekomme store bildefiler, så vi må oppdage (og muligens grasiøst mislykkes) i slike situasjoner.Dynamisk minneallokering Er en hovedkilde for «minnelekkasjer», hvor programmer allokerer, bruker og deretter gjøres med et område med minne, men unnlater å merke det som tilgjengelig igjen. Disse problemene kan være vanskelig å spore opp siden i motsetning til andre bugs, lekkasjer er ikke lett synlig.
Noen moderne språk har innebygde mekanismer for å forsøke å forhindre minnelekkasjer, kjent som søppelsamling. Dette systemet holder styr på hvilken tildeling som brukes der, når den er ute av omfang. Søppelsamling har en liten ytelsesstraff, men det er nå ofte ansett som fremgang. Java og Python har for eksempel en søppelkollektor.