Hvis det som måtte til var at strømmen ble koblet ut, så tror jeg neppe at det har noe som helst med memory leaks å gjøre. Det høres mer ut som noe fysisk problem med hardwaren, uten at jeg skal sette noen diagnose på akkurat dét.
I de aller aller fleste moderne systemer så har man virtuelt minne. Når en prosess startes opp så vil den få tildelt noe virtuelt minne som har relative adresser i den fysiske rammen. Det vil si at når et program trenger minne så forholder den seg i utgangspunktet (med mindre den opererer under kernel-space) til det virtuelle minnet, og ikke direkte i den fysiske rammen. Prosessen starter opp, spør etter minne hos memory mangeren som er ansvarlig for å holde kontroll på minnet til operativsystemet, og sjekker tilgjengelig minne og gir dette til prosesen som så kan benytte minnet slik den ønsker. Dersom det kreves mer minne så vil det på nytt bli forespurt, og det virtuelle adresseområdet vil bli utvidet. Når en prosess termineres så vil det virtuelle minnet frigjøres, og uavhengig av hvor mye memory leaks programmet har klart å produsere så vil dette minnet kunne gies til andre prosesser.
Fordi minnebehovet til en prosess kan variere i ganske stor grad, så vil en prosess gjerne få tildelt mer minne enn det er behov for. Dette er selvsagt fordi at memory manageren arbeider preventivt slik at den ikke trenger å gjøre unødvendig mye arbeid dersom en prosess sitt minnebehov plutselig skulle øke relativt mye. Memory manageren har rettighet til å kunne ta vekk en del virtuelt minne fra en prosess dersom det skulle bli behov for det.
Det er her (mange av) disse memory cleanerene kommer inn i bildet. Jeg skal ikke si at det er nøyaktig slik absolutt alle fungerer, men mange gjør det. Men for å gi et (generelt og simplifisert) eksempel med en prosess som opererer i user-space:
Si at et OS har totalt 1024MB med minne å rutte med etter at kernelen og øvrige autoriteter har gjort krav på sitt minne. Det startes en prosess som i praksis trenger 256MB med minne, men den mottar 512MB med virtuelt minne fra memory manager. Vi har da tilgjengelig 512MB med minne som enten kan gis til prosessen, eller til andre prosesser som krever dette.
Memory cleaneren starter, og den gjør en forespørsel på ikke 512MB med minne, men på 768MB med minne. Memory manageren vet at i prosesen som ble startet tidligere så er det 256MB med minne som ikke er allokert av prosessen, så den fjerner dette fra prosessens virtuelle minne og gir dette videre til memory cleaneren. Memory cleaneren termineres etter at minnet har blitt "vasket".
Hva har i praksis hendt her? Jo, prosessen som tidligere hadde 512MB med minne i "bruk", har nå 256MB minne i bruk. Brukeren vil selvfølgelig tenke at ja her har det pokker meg blitt tatt en real vårrengjøring! Har dette noen spesiell nytteverdi? Nei, ikke egentlig. For om en annen prosess faktisk hadde hatt behov for minnet så ville den først og fremst mottatt dette. Ikke minst at nå må faktisk memory manageren utvide det virtuelle minneområdet til vår kjære prosess dersom det skulle bli behov for mer allokering av minne. Jeg har driftet servere og programmert under forskjellige platformer av yrke siden 2004. Har brukt PC siden det tidlige nittitall, og jeg kan si at jeg aldri har hatt bruk for noen programmer som påstår at de cleaner minnet.
Jeg hadde et annet poeng også da jeg startet posten, men det forsvant visst.
Sist endret av m0b; 19. juni 2013 kl. 12:32.