Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Mitä haittaa muistivuodoista?

Kray [02.03.2008 14:42:02]

#

Ihan vain ihmettelin, että mitä käytännön haittaa muistivuodoista on? Siis se että ei vapauta muistia? Eikös se "haitta" nollaudu kun sammuttaa koneen?

tgunner [02.03.2008 15:48:56]

#

Nii, mitäs sit, kun pitää konetta päällä useita kuukausia?

jcd3nton [02.03.2008 15:53:08]

#

duclare@akari ~ $ uptime
15:52:22 up 171 days, 22 min, 7 users, load average: 0.00, 0.00, 0.00
duclare@hikari ~ $ uptime
15:52:32 up 34 days, 10 min, 21 users, load average: 0.42, 0.22, 0.13

kray: Siinä on sit vähän pidemmäksi aikaa haittojen kanssa tappelemista. Miksi sitä muistia turhaan heittää pois jos sen voi välttää kirjoittamalla toimivaa softaa. Pahimmassa tapauksessa joku ruma windows-softa syö muistin tyhjäksi muutaman tunnin leikkimisellä ja meinaa kone hitaalle tuulelle. Sitä sit boottailemaan...

Lebe80 [02.03.2008 15:53:43]

#

tgunner kirjoitti:

Nii, mitäs sit, kun pitää konetta päällä useita kuukausia?

"Koneethan suljetaan joka ilta" ;)

Blaze [02.03.2008 15:55:43]

#

kray kirjoitti:

Ihan vain ihmettelin, että mitä käytännön haittaa muistivuodoista on? Siis se että ei vapauta muistia?

Jos kokoajan vuodetaan muistia, se loppuu jossain vaiheessa kesken.

kray kirjoitti:

Eikös se "haitta" nollaudu kun sammuttaa koneen?

No, joo. Mut ei kaikkia kiinnosta olla boottailemassa kokoajan konetta, ja lisäksi riippuen vuodetun muistin määrästä, muisti saattaa tulla täyteen hyvinkin äkkiä. Et varmaan halua, että peli kaatuu aina tunnin pelaamisen jälkeen?

Ja osallistun kisaan:
blaze@sakura ~ $ uptime
15:55:14 up 60 days, 23:36, 5 users, load average: 0.45, 0.47, 0.60

Kray [02.03.2008 16:04:34]

#

Okei... Ja sitten toitte foorumille asti noi irkissä olleet kisat...

Edit: tgunner: Nojoo, mutta kun en ole koneella niin suljen sen.

Metabolix [02.03.2008 17:53:59]

#

Tässäpä yksinkertainen esimerkkitapaus. Olkoon piirtofunktiossa muistivuoto, joka vuotaa joka kerta kuvan koon verran muistia. Oletetaan, että kuvat ovat 32x32 pikselin kokoisia RGBA-kuvia, joiden tallentamiseen tarvitaan siis 4096 tavua eli 4 kilotavua. Jos näitä pieniä kuvia piirretään vaikkapa kymmenen joka framella ja pelin fps on noin 25, muistia vuotaa 25*10*4 = 1000 kilotavua eli yksi megatavu joka sekunti.

1 MB/s on paljon, ja esimerkki ei ole lainkaan liioiteltu. Tällaiseen lopputulokseen pääsee nimittäin helposti vaikkapa SDL:n kanssa, jos piirtofunktiossa joka kerta pyörittää kuvan apupinnalle oikeaan asentoon ja unohtaa vapauttaa tämän väliaikaisen kuvapinnan. Muutamassa minuutissa peli täyttää koneen keskusmuistin ja alkaa käyttää kovalevyä muistin jatkeena, kunnes lopulta tulee vastaan 32-bittisen koneen muistiavaruuden raja (4 GB).

Myös muut resurssit kuin muisti voivat vuotaa aivan vastaavasti. Avoimilla tiedostoilla on usein jokin maksimi, joka kylläkin harvoin tulee harrastelijalle vastaan. Ainakin Windows 98 sisälsi läpinäkyvän piirron funktiossa (TransparentBlt) jonkin vuodon, jonka takia tietyn piirtomäärän jälkeen funktio ei enää toiminut lainkaan. Tämän kanssa raja tuli vastaan omatekoisessa Tetrix-kloonissa hyvin nopeasti, muutamassa sekunnissa.

Nykyaikaiset käyttöjärjestelmät pitävät kirjaa muistista ja monista muistakin asioista prosessikohtaisesti, jolloin ohjelman sulkeutuessa enimmät sen varaamat resurssit vapautuvat automaattisesti. Ongelman ei siis pitäisi jäädä kummittelemaan enää ohjelman sulkemisen jälkeen. Ohjelman itsensä toiminta sen sijaan voi estyä täysin, ja tietenkin kaikki samaan aikaan käynnissä oleva kärsii tilanteesta.

Muistivuotojen kanssa ei ole kyse pysyvistä haitoista vaan juuri senhetkisestä tilanteesta. Jos muistia vuotaa, koko järjestelmä hidastuu ja menee lopulta pahasti jumiin, kunnes muistia varaava ohjelma kaatuu tai sammutetaan väkisin. Muistivuodottoman ohjelman tekeminen ei siis ole vain kohteliaisuus muita kohtaan, vaan siitä riippuu, onko ohjelma käyttökelpoinen ja haluaako sitä kukaan käyttää.

(Mod. huom: älkäähän kisatko uptimeistä — tai kisatkaa tejeezin uptimesivulla.)

Vastaus

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

Tietoa sivustosta