Muistin
varaukset keosta (heap)
Ohjelma varaa käyttöönsä muistia, jossa muuttujat ja ohjelma voivat
toimia. Muuttujille varattu muisti jakaantuu kahteen osaan, pinoon
(stack) ja kekoon (heap). Pinoon talletetaan paikalliset muuttujat sekä
fuktiokutsujen parametrit ja funktioiden paluuosoitteet. Pinoa ohjaa
pino-osoitin joka näyttää pinon päällimmäiseen tietoon. Pino toimii
automaattisesti, eikä ohjelmoitsija ohjaa sitä ohjelman sisältä. Keko
on toinen tietovarasto, johon säilötään yhteiset muuttujat sekä sieltä
voidaan varata muistia dynaamisesti muutujien käyttöön. Ongelmana on se
, että kaikki osoitukset kekoon täytyy tehdä osoitteiden avulla ja
kaikki muisti on varattava ennen käyttöä. Lisäksi ohjelman on
muistettava kaikki varauksensa, jottei muistia hukata. Käsiteltäessä
pitkiä merkkijonoja tai tietueita, kannataa niille varata
erikseen muistialueet keosta. Otsikkotiedosto malloc.h sisältää muistin
varaukseen eli allokointiin usbeita funktioita esim.:
• alloc
• calloc
• malloc
• free
Seuraavana on esimerkki _fmalloc allokointi-funktion käytöstä, joka
varaa muistia toisesta 64 kb muistilohkosta.
Funktio varaa osoittimelle pTuotteet tilaa VuoronTiedot tietueen
verran.
if((pTuotteet = _fmalloc( 1 * sizeof (struct VuoronTiedot)))==NULL)
{
printf("Allokointivirhe !!!");
exit(1);
}
Funktio varaa osoittimelle OsSiirtoVektori tilaa 100 merkkiä.
if(OsSiirtovektori = _fmalloc( 100 * sizeof(char))==NULL)
{
printf("Allokointivirhe !!!");
exit(1);
}
|