Pointer (programmeerconcept)
Uit Wikipedia, de vrije encyclopedie
Een pointer is in een programmeertaal een variabele die als waarde een geheugenadres bevat.
De waarde van een pointer kan het adres van een variabele zijn (mogelijk een andere pointer), maar het kan ook naar een willekeurig ander adres verwijzen, bijvoorbeeld een stuk gealloceerd geheugen, of zelfs een functie.
Beschikbaarheid in programmeertalen
Veel traditionele programmeertalen als bijvoorbeeld C hebben uitgebreide mogelijkheden om met pointers te werken. Dit levert grote flexibiliteit op (bijvoorbeeld in vergelijking met een taal als Fortran 77 dat slechts zeer beperkte pointers kent), maar ook maakt het werken met pointers en berekeningen aan pointers in dergelijke programmeertalen het vaak erg moeilijk om foutloze programma's te schrijven die er correct voor zorgen dat ze de geheugenplaatsen op de juiste manier reserveren en vrijgeven. Omdat een pointer naar een geheugenadres wijst kan hij ook, door onvoorzichtig of foutief programmeren, naar een verkeerd geheugenadres gaan wijzen waar het programma niets te zoeken heeft en zo andere gegevens van het programma wijzigen of (indien daartegen geen bescherming is) gegevens van andere programma's of zelfs het draaiende operating system beschadigen waardoor het hele systeem herstart moet worden. Dergelijke bugs zijn vaak lastig op te sporen.
In modernere objectgeoriënteerde scripttalen worden geen pointers meer op deze manier gebruikt. Intern worden nog wel pointers gebruikt, maar doordat ze voor de programmeur worden afgeschermd en de programmeertalen zelf voor het reserveren en vrijgeven van de nodige geheugenplaatsen zorgen, wordt het programmeren van ingewikkelde constructies fundamenteel eenvoudiger. Er zijn twee technieken die in zulke programmeertalen gebruikt worden om niet gebruikte ruimte automatisch weer vrij te geven:
- door bij te houden hoeveel verwijzingen er naar een variabele zijn, en de ruimte automatisch vrij te geven zodra het aantal verwijzingen nul wordt (reference counting)
- door regelmatig door het hele geheugen te spitten, en de ruimte vrij te geven van variabelen die niet meer gebruikt worden (garbage collecting)
Beide methoden hebben hun voor- en nadelen, ze worden dan ook soms gecombineerd.
Handles
Het veelvuldig gebruik van dynamische geheugenallocatie kan resulteren in fragmentatie van het gebruikte geheugen. Het is heel moeilijk om dat probleem op te lossen. Een systeem dat door Apple ooit op de originele Apple Macintosh met 68000-processor werd geïntroduceerd om fragmentatie van het geheugen op te lossen is het gebruik van handles: pointers naar pointers. Als een programma alleen handles gebruikt, kan een bibliotheek worden gebruikt die automatisch het gebruikte geheugen naar behoeven defragmenteert.
Text is available under the CC BY-SA 4.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.