Tijdens een van de lessen op school hadden we een discussie met de leraar over memory leaks.
Hij zei dat memory leaks niet heel erg waren, omdat een programma van het OS een geheugen ruimte (pages) krijgt toegewezen, welke weer wordt vrijgegeven nadat het programma exit.
nu was ons idee dat het OS nooit kan weten of er niet meer naar dat geheugen verwezen wordt (de referencecount wordt nooit verlaagd ofzo) dus zal dat geheugen nooit worden vrijgegeven.
Nu vroeg ik me het volgende af:
Het is dacht ik zo dat sinds de NT-kernels er met pages gewerkt wordt, en een programma/proces krijgt een aantal van die pages toegewezen. Mocht je meer nodig hebben dan krijg je er wat pages bij.
Bij de oudere (9x) windows versie was dit nog niet zo, dus daar kreeg je gewoon een stukje geheugen, toch?
Maar als nu het OS bijhoudt welke pages er aan het programma toegekend zijn (Vandaar ook de "Page Access Faults" enzo als je aan iemand anders' ruimte komt), dan kan het OS toch ook in de gaten houden of het programma nog draait, en zo niet de pages weer vrijgeven voor gebruik?
Natuurlijk is het voor lang lopende processen dan nog steeds belangrijk dat je erop let dat je niet gebruikt geheugen vrijgeeft, omdat het anders langzaam aan vol loopt, maar voor een klein programmaatje, dat nooit meer dan de standaard ruimte (toegewezen pages) gebruikt zal het niet zo heel erg zijn toch?
Voor de duidelijkheid: Ik ben zelf ook niet overtuigd door m'n leraar, maar goed. Probeer zelf ook zonder leaks te programmeren (niet altijd even makkelijk
).
p.s. Iemand een idee hoe goed de memoryleak detectie van visual (c++) studio.NET en visual (c++) studio 6.0 is?
Hij zei dat memory leaks niet heel erg waren, omdat een programma van het OS een geheugen ruimte (pages) krijgt toegewezen, welke weer wordt vrijgegeven nadat het programma exit.
nu was ons idee dat het OS nooit kan weten of er niet meer naar dat geheugen verwezen wordt (de referencecount wordt nooit verlaagd ofzo) dus zal dat geheugen nooit worden vrijgegeven.
Nu vroeg ik me het volgende af:
Het is dacht ik zo dat sinds de NT-kernels er met pages gewerkt wordt, en een programma/proces krijgt een aantal van die pages toegewezen. Mocht je meer nodig hebben dan krijg je er wat pages bij.
Bij de oudere (9x) windows versie was dit nog niet zo, dus daar kreeg je gewoon een stukje geheugen, toch?
Maar als nu het OS bijhoudt welke pages er aan het programma toegekend zijn (Vandaar ook de "Page Access Faults" enzo als je aan iemand anders' ruimte komt), dan kan het OS toch ook in de gaten houden of het programma nog draait, en zo niet de pages weer vrijgeven voor gebruik?
Natuurlijk is het voor lang lopende processen dan nog steeds belangrijk dat je erop let dat je niet gebruikt geheugen vrijgeeft, omdat het anders langzaam aan vol loopt, maar voor een klein programmaatje, dat nooit meer dan de standaard ruimte (toegewezen pages) gebruikt zal het niet zo heel erg zijn toch?
Voor de duidelijkheid: Ik ben zelf ook niet overtuigd door m'n leraar, maar goed. Probeer zelf ook zonder leaks te programmeren (niet altijd even makkelijk
p.s. Iemand een idee hoe goed de memoryleak detectie van visual (c++) studio.NET en visual (c++) studio 6.0 is?