Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Muistin varaamisen epäonnistuminen

Sivun loppuun

Gaxx [30.11.2005 22:00:47]

#

Ihan sellanen pikanen kysymys, että voiko muistin varaaminen(dynaamisesti) epäonnistua ja milloin? Loogisesti silloin, kun muisti loppuu kesken(osaako se käyttää kiintolevyä lisämuistina? Käyttöjärjestelmäriippuvainen?), mutta voiko muulloin?

Voiko esimerkiksi silloin, kun varataan oikein iso taulukko(esim. 200Mt) ja muistipalikassa ei ole niin suurta yhtenäistä "aukkoa"?

Heikki [30.11.2005 22:03:07]

#

Ihan mutuna sanoisin, että varaaminen hoituu käyttöjärjestelmän kautta ja ohjelma ei edes tiedä, mistä käyttis sen muistin varaa. Eli jos muisti on lopussa, varataan kovotilaa.

Ainakin Linuxissa tällöin käytetään swappiosiota, ja jos se täyttyy niin kone kaatuu. Samanlainen kaatuminen voi tapahtua Windowssissakin jos swappifiluja varten käytettävä levyosio täyttyy.


Eli itse kysymykseen: enpä näe mitään tilannetta em. lisäksi missä muistin varaaminen voisi epäonnistua.

Gaxx [30.11.2005 22:17:01]

#

Joo. Tuli löpistyä vähän turhaa aloitusviestissä, sillä varsinainen kysymykseni oli tuo viimeinen lause "Voiko esimerkiksi silloin, kun varataan oikein iso taulukko(esim. 200Mt) ja muistipalikassa ei ole niin suurta yhtenäistä "aukkoa"?".

Voi olla, että vastasit siihen jo, mutta itselleni jäi epäselväksi se, että koskiko vastausesi myös tätä varsinaista "pääkysymystä".

Metabolix [30.11.2005 22:17:32]

#

Siksipä Windowsin asetuksissa on sivutustiedoston koon säätö, ja Linuxilla on kai tätä varten swap-osio.

Jos muisti loppuu (RAM ja järjestelmän virtuaalimuisti), niin homma ei toimi.

Varaaminen voi tökkiä myös, jos jokin on sekoittanut järjestelmää. (Jotain Heap-sanan sisältäviä virheitä yleensä putkahtelee. En nyt tuolle suomennosta saa aikaan.)

Sitten käsittääkseni jossakin Windowsissa on joskus ollut jonkinlainen "suojaus" liian isoja varauksia vastaan, vaikkei se fyysisesti olisikaan mahdotonta, ja sitä ovat jotkut joutuneet kiertämään.

Gaxx [30.11.2005 22:24:44]

#

Kiitos, asia tuli jotakuinkin selväksi.

Blaze [30.11.2005 22:36:34]

#

Metabolix kirjoitti:

(Jotain Heap-sanan sisältäviä virheitä yleensä putkahtelee. En nyt tuolle suomennosta saa aikaan.)

C:n opettaja puhu kasasta. Stack on sitten pino, vaikka senhän kaikki tiesti jo tiesikin.

FooBat [30.11.2005 23:30:47]

#

Ainakin vanhoissa dos-ohjelmissa muistin loppunen ja dynaamisen muistinvarauksen epäonnistuminen oli ihan todellinen ongelma.

thefox [01.12.2005 23:43:26]

#

Heikki kirjoitti:

Ihan mutuna sanoisin, että varaaminen hoituu käyttöjärjestelmän kautta ja ohjelma ei edes tiedä, mistä käyttis sen muistin varaa. Eli jos muisti on lopussa, varataan kovotilaa.

Ei ihan noin. Varausta ei varsinaisesti suoriteta muistista tai kovalevyltä, se vain varataan, sitten käyttis heittelee sitä swapin (kovalevyn) ja fyysisen muistin välillä tarpeen mukaan.

Vaikka fyysistä muistia olisi 100 Gt ja kovalevytilaa 1000 Gt niin viimeistään muistin varaus epäonnistuu kun muistiavaruus loppuu kesken (esim. 32-bittinen muistiavaruus mahdollista 4 Gt:n osoittamisen). Käyttis lohkaisee tuosta 4 Gt:stä vielä osansa, Windows varaa muistaakseni yhden gigatavun. Ja muistiavaruus on tietysti softakohtainen, eli vaikka Softa1(TM) varaisi 3 Gt, ei se vaikuttaisi Softa2:n muistinvarausmahdollisuuksiin.

64-bittisellä voidaankin sitten osoittaa mukavat 17 179 869 184 Gt muistia.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta