Dynamisk minnesallokering

Dynamisk minnesallokering  är en metod för att allokera dator- RAM för objekt i ett program, där tilldelningen av minne för ett objekt utförs under körningen av programmet .

Med dynamisk minnesallokering placeras objekt i den sk. " heap " ( eng.  heap ): när man konstruerar ett objekt indikeras storleken på minnet som begärts för objektet, och, om det lyckas, "tas det tilldelade minnesområdet, relativt sett, bort" från " heap ", vilket blir otillgänglig under efterföljande minnesallokeringsoperationer. En operation som har motsatt betydelse är frigörandet av minne som tidigare upptagits av något objekt: det frigjorda minnet, även villkorligt sett, återförs till " högen " och blir tillgängligt under ytterligare minnesallokeringsoperationer.

När nya objekt skapas i programmet minskar mängden tillgängligt minne. Därav behovet av att ständigt frigöra tidigare tilldelat minne. I en idealisk situation bör programmet helt frigöra allt minne som krävdes för arbete. I analogi med detta måste varje subrutin ( procedur eller funktion ) säkerställa frigörandet av allt minne som allokerats under dess exekvering. Felaktig minneshantering leder till den sk. " läckor " av minne, när det tilldelade minnet inte frigörs. Flera minnesläckor kan tömma allt RAM och störa operativsystemet.

Ett annat problem är problemet med minnesfragmentering. Minnesallokering sker i block - kontinuerliga fragment av RAM (alltså varje block är några på varandra följande byte ). Vid någon tidpunkt kan högen helt enkelt inte ha ett block av lämplig storlek, och även om det finns tillräckligt med ledigt minne för att ta emot objektet kommer minnesallokeringsoperationen att misslyckas.

För att hantera den dynamiska tilldelningen av minne används en "sopsamlare" - ett programobjekt som övervakar tilldelningen av minne och säkerställer att det släpps i tid. Sophämtaren ser också till att de fria blocken har maximal storlek och defragmenterar vid behov minnet.

Implementeringselement

Programmeringsspråket C (C)

Programmeringsspråket C har följande funktioner för dynamisk minnesallokering som ingår i standardbiblioteket :

Programmeringsspråket C++

C ++ har två operatorer:

Programmeringsspråket Object Pascal

Objekt Pascal har två operatorer:

Se även

Källor