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 (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


{anchor:dynaaminen}

h2. Muistin varaukset keosta (heap)



Otsikkotiedosto malloc.h sisältää muistin varaukseen eli allokointiin useita funktioita esim. seuraavat:
* {{alloc()}}
* {{calloc()}}
* {{malloc()}}
* {{free()}}

h2. Esimerkki 1

{code}
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);
}
{code}
h2. Esimerkki 2

Seuraavana on esimerkki {{

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 ((pTuotteet = _fmalloc(1 * sizeof(struct VuoronTiedot))) == NULL)
{
    printf("Allokointivirhe!!!");
    exit(1);
}
{code}

Funktio

...

varaa

...

osoittimelle

...

OsSiirtoVektori

...

tilaa

...

100

...

merkkiä:

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