Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Ohjelma

...

varaa

...

käyttöönsä

...

muistia,

...

jossa

...

muuttujat

...

ja

...

ohjelma

...

voivat

...

toimia.

...

Muuttujille

...

varattu

...

muisti

...

jakaantuu

...

kahteen

...

osaan

...

:

  1. pinoon

...

  1. (stack)

...

  1. kekoon

...

  1. (heap)

...

Pinoon

...

talletetaan

...

paikalliset

...

muuttujat

...

sekä

...

funktiokutsujen parametrit

...

ja

...

funktioiden

...

paluuosoitteet.

...

Pinoa

...

ohjaa

...

pino-osoitin

...

, joka

...

näyttää

...

pinon

...

päällimmäiseen

...

tietoon.

...

Pino

...

toimii

...

automaattisesti,

...

eikä

...

ohjelmoija 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.

Anchor
staattinen
staattinen

Muistin varaus pinosta (stack)

...

Anchor
dynaaminen
dynaaminen

Muistin varaukset keosta (heap)

Otsikkotiedosto malloc.h

...

sisältää

...

muistin

...

varaukseen

...

eli

...

allokointiin

...

useita funktioita

...

esim. seuraavat:

  • 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.

Funktio varaa osoittimelle pTuotteet tilaa VuoronTiedot tietueen verran:

Code Block

if 

    •  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ä:

Code Block

if .

       if(OsSiirtovektori = \_fmalloc( 100 * sizeof(char)) == NULL)
       {
             {
     printf("Allokointivirhe \!\!\!");
                  exit(1);
       }}