gebruikmakend van VariablesEdit
zichtbaarheid en levensduur van VariablesEdit
variabelen kunnen een andere zichtbaarheid of reikwijdte hebben, afhankelijk van hoe ze worden gedeclareerd en gebruikt. Scope verwijst naar de mogelijkheid om toegang te krijgen tot de inhoud van een bepaalde variabele op een bepaald punt in het programma.
gewoonlijk wordt het bereik van een variabele bepaald door zijn omsluitingsblok. Een blok kan expliciet worden ingesloten in sommige talen (begin/einde, {/} paren), terwijl in andere het blok impliciet is.
bijna alle talen hebben een algemene begrenzing scope, en als een programma een variabele in deze scope declareert, is het bekend als een globale variabele.
een lokale variabele, daarentegen, is een die alleen zichtbaar is, of” in scope”, binnen zijn blok.
beschouw deze code als:
integer globalVariableglobalVariable = 5begin integer localVariable localVariable = 7 globalVariable = 8endlocalVariable = 3 /* <-- this is a syntax error */
de globale variabele wordt buiten een blok gedeclareerd, dus binnen het (impliciete) globale bereik, waardoor het een globale variabele is. de lokale variabele wordt gedeclareerd in het begin / einde blok, het beperken van de reikwijdte tot dat blok.
variabele globalVariable begint als 5, wordt toegewezen 8 in het blok en eindigt als 8. Variabele localVariable wordt toegewezen 7, dan gaat uit het bereik voordat illegaal wordt toegewezen 3. Er is geen variabele localVariable op dit niveau.
de levensduur van een variabele geeft aan wanneer de variabele actief is. In het voorgaande voorbeeld wordt een globale variabele aangemaakt aan het begin van het programma en heeft een levensduur gelijk aan de lengte van het programma. Voor localVariable, het is niet gemaakt tot net na het blok begint richtlijn. Zijn leven is voorbij wanneer het programma de eindrichtlijn passeert.
Dynamic memory allocationEdit
veel programma ‘ s hebben zeer specifieke doeleinden en hebben zeer specifieke en kleine gebieden nodig voor geheugen. Als we een programma schrijven voor het lezen van beeldbestanden, weten we niet precies hoe groot de beelden zouden kunnen zijn. Sommige kunnen honderden megabytes zijn, terwijl sommige kilobytes of minder kunnen zijn. Het toewijzen van honderden megabytes die niet nodig zijn, zou het programma moeilijk maken om op sommige computers te draaien, terwijl het toewijzen van te weinig geheugen zou betekenen dat er een aantal beelden zijn die we niet aankunnen.
een goede benadering van dit probleem is het toewijzen van geheugen als dat nodig is. Dit heet Dynamic memory allocation. We vragen gewoon om zoveel als we nodig hebben terwijl het programma draait (in plaats van tijdens het compileren), niet meer en niet minder. In ons voorbeeld zouden we hiermee zowel grote als kleine afbeeldingsbestanden op een efficiënte en effectieve manier kunnen bewerken. Er is enige extra complexiteit, omdat het niet langer de taal is die zich bezighoudt met de details van de toewijzing, maar ons rechtstreeks. In ons voorbeeld, als we draaien op een lagere end computer, is er mogelijk niet genoeg geheugen om grote beeldbestanden tegemoet, dus we moeten detecteren (en mogelijk sierlijk falen) in dergelijke situaties.
Dynamic memory allocation is een belangrijke bron van” memory leaks”, waar Programma ‘ s toewijzen, gebruiken en worden gedaan met een gebied van geheugen, maar niet om het opnieuw beschikbaar te markeren. Deze problemen kunnen moeilijk op te sporen, omdat in tegenstelling tot andere bugs, lekken zijn niet gemakkelijk duidelijk.
sommige moderne talen hebben ingebouwde mechanismen om geheugenlekken te voorkomen, bekend als garbage collection. Dit systeem houdt bij welke toewijzing wordt gebruikt waar, wanneer het buiten het bereik is. Garbage collection heeft een lichte prestatie boete, maar het wordt nu algemeen beschouwd als vooruitgang. Java en Python, bijvoorbeeld, hebben een garbage collector.