Muistin varaus pinosta (stack)
...
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.
...
alloc()
calloc()
malloc()
free()
Esimerkki 1
Code Block |
---|
int puskuri = (int*)malloc(10*sizeof(int)); // Varataan muistia 10 intille
//assert(puskuri != NULL);
if (puskuri == NULL)
{
printf("Virhe varatessa muistia\n\n");
exit(-1);
}
|
Esimerkki 2
Seuraavana on esimerkki malloc()
allokointi-funktion käytöstä, joka varaa muistia toisesta 64 kb muistilohkosta.
...
Code Block |
---|
if (OsSiirtovektori = _fmalloc(100 * sizeof(char)) == NULL)
{
printf("Allokointivirhe!!!");
exit(1);
}
|