Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Muistin

...

varaus

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);

...

       }