Dynaaminen muistinvaraus

Dynaaminen muistinvaraus (engl. Dynamic Memory Allocation) on muistinvarausmenetelmä, jossa tietokoneohjelma suorittaa ajon aikana muuttujan tai muistilohkon varauksen tietokoneen muistista. Dynaamista muistinvarausta käytetään, kun tarvittavan muistin määrää ei tiedetä etukäteen ohjelmaa kirjoitettaessa. Esimerkki tällaisesta tilanteesta on esimerkiksi kuvankäsittelyohjelma: ohjelmoija ei voi tietää etukäteen, minkä kokoisia kuvatiedostoja käyttäjä haluaa avata ohjelmalla.

Dynaamista muistinvarausta käytettäessä ohjelma ei voi tietää etukäteen, minkä keskusmuistin kohdan käyttöjärjestelmä sille antaa. Tämän takia dynaamisesti varattuja muistialueita käytetään epäsuorasti, yleensä osoittimen avulla.

Dynaamisesti varattu muisti varataan keosta (engl. heap). C-kielellä dynaaminen muistinvaraus toteutetaan malloc(), calloc(), free() ja realloc() -funktioilla.[1]

Dynaaminen muistinvaraus voi johtaa helposti ohjelmointivirheisiin, kuten muistivuotoihin. Lisäksi varatun muistin vapautus voi viedä ennustamattoman paljon aikaa. Riskin vuoksi dynaamista muistinvarausta vältetään luotettavuutta vaativissa tai reaaliaikajärjestelmissä. Ilmailun laatustandardi DO-178B (Software Considerations in Airborne Systems and Equipment Certification) kieltää dynaamisen muistinvarauksen käytön turvallisuuskriittisessä ilmailujärjestelmissä.[2]

LähteetMuokkaa

  1. https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/
  2. Justifiably taboo: Avoiding malloc()/free() APIs in military/aerospace embedded code mil-embedded.com.

Aiheesta muuallaMuokkaa