Heap (från engelskans substantiv för trave eller hög) är ett avgränsat minnesutrymme i RAM som återanvänds för data som lagras tillfälligt. Reservationen av minnet sker automatiskt eller genom programinstruktioner som uttryckligen bokar och avbokar minnesarea. Ett operativsystem håller reda på vilka delar som är lediga. I ett datorsystem finns många heapar, oftast en heap per process. Dessutom finns en eller flera systemheapar.

Fragmentering redigera

När ett minnesfragment som ligger mellan två andra bokade minnesfragment avbokas, är det lediga minnesutrymmet inte längre sammanhängande. Heapen får med tiden allt fler luckor av det slaget och med tiden blir detta ett problem som kallas fragmentering. Endast block som är mindre än det största sammanhängande blocket kan bokas trots att det kanske finns gott om minne kvar om man summerar småblocken. Problemet hanteras på applikationsnivå till skillnad från diskdefragmentering där operativsystemet tar hand om att länka ihop småblocken.

Skräpsamling redigera

I vissa operativsystem och i vissa programspråk har man uppmärksammat problemet med fragmentering och minnesläckor. Lösningen kan vara att låta alla minnesaccesser gå via en dubbel pekare (s.k. handle). På så sätt kan operativsystemet kopiera ihop småblocken och peka om den andra pekaren utan att programmet märker det. Detta tar givetvis extra tid men har den fördelen att man inte behöver avsluta programmet på grund av fragmentering. Programspråk som Java håller kontroll på alla pekare i programmen och lämnar automatiskt tillbaka minnesblock som ingen aktiv process pekar på och undviker på så sätt en del minnesläckor. Samlingsnamnet på dessa tekniker är skräpsamling eller "garbage collection".

Minnesläckor redigera

Huvudartikel: Minnesläckage

Om anropen som hämtar minne inte matchas av anrop som lämnar tillbaka minnet när det inte längre behövs uppstår minnesläckor. Efter en given tid tar givetvis minnet på heapen slut. Det kan ta delar av en sekund eller flera år. Minnesläcka är den oftast förekommande orsaken till att man måste starta om en dator som "blivit trög" men som i övrigt synes fungera. Efter omstart är heaparna rena och fina igen eftersom de ligger i arbetsminnet.

Konsekvenser redigera

Om heapen tar slut på grund av fragmentering eller minnesläckor och applikationen inte kan hantera det dör programmet med ett "out of memory"-fel. Om det händer på systemnivå kan vitala delar av datorsystemet slås ut och i vissa fall hela datorsystemet.

Se även redigera