Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

Wat is een Handle?

Anoniem
h4xX0r
4 antwoorden
  • Wat is een Handle?

    Deze vraag stel ik niet zozeer omdat ik wil gaan programmeren, maar omdat ik problemen heb met windows 98.

    explorer.exe "vreet" handles waardoor de PC vastloopt. Zie voor meer details mijn vraag in de "Windows OS", "Memory Leak in Windows 98 SE (door verkenner)".

    Bedankt voor de moeite,

    Willem
  • Een handle is een handvat, iets waarmee je een object kan vasthouden. Ook wordt een object door zo'n handle geïdentificeerd omdat ieder handle uniek is. De meeste objecten hebben een handle en via zo'n handle kun je ook iets doen met die objecten.

    Zie het als een enorm grote parkeerplaats met allemaal auto's. Als je een specifieke auto iets wil laten doen of er iets mee wilt doen, dan zou je alle auto's af moeten gaan om te kijken of het model goed is, het type goed is, de kleur goed is, etc., totdat je eindelijk de juiste auto hebt. Als je nu op alle auto's een vlaggetje plaatst met uniek kleurtje, dan hoef je alleen de unieke kleur op te zoeken en je hebt de juiste auto te pakken.

    Misschien erg simplistisch, maar het versnelt wel de werking van Windows. Een flink aantal API functies (functies die in Windows zelf zitten en waar de programmeur gebruik van kan maken) maken gebruik van die handles, voornamelijk vanwege identificatie van het object.
  • Zonder Handles zou Windows eigenlijk onmogelijk worden :)
  • zonder handles is Windows onhandelbaar… :lol:

    Vergelijk een handle met het handvat van een keukenmes. Zonder handvat is zo'n mes lastig vast te houden en heb je een grotere kans dat je je in je vingers snijdt. (Tenzij het een bot mes is natuurlijk.)

    Een handle kun je eigenlijk vergelijken met een pointer binnen Windows. Het is overigens geen rechtstreekse pointer naar een geheugenadres maar meer een index in een tabel van handles. Deze tabel wordt door Windows intern beheerd, aangezien fysieke geheugenadressen binnen Windows nog wel eens kunnen veranderen. (Dit omdat Windows continu het geheugen optimaliseert of naar de swapfile schopt.) Door handles te gebruiken heb je een langere weg te gaan om het fysieke adres van een object te bepalen maar als voordeel kun je dus flexibeler met geheugen omgaan. Vandaar dat MS voor deze oplossing heeft gekozen. (En niet alleen MS, overigens.) Het verschil in snelheid is overigens vrijwel onmerkbaar.

    Nu denken velen dat wanneer ze met pointers onder Windows werken dat deze pointers wel naar een fysiek adres wijzen maar dit is maar gedeeltelijk waar. Je zult namelijk eerst een blok geheugen moeten alloceren en dan krijg je dus een handle naar dit blok terug. Dit blok kun je vergroten of verkleinen indien nodig. Je pointers zijn dan ook gewoon pointers binnen dit blok geheugen. Dus als je via een pointer een geheugenadres benadert dan wordt via de geheugen-handle met daarnaast de pointer (offset binnen geheugenblok) het exacte adres bepaald van hetgeen je wilt benaderen.

    Wat is het probleem met handles? Wel, Windows heeft dus een tabel waarin deze handles worden opgenomen en deze lijst kan wel eens vol raken als er erg veel handles gebruikt worden. Gelukkig heeft iedere applicatie zijn eigen handles-tabel en kan deze tabel in de nieuwere Windows versies vrij groot zijn. Maar ja, als er geheugen wordt verplaatst dan moet Windows ook extra veel handles aanpassen, wat het geheel dus weer verder vertraagd. Vooral als je weinig geheugen hebt of lekkende applicaties kan dit erg vervelend zijn…

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.