Viitelaskenta

Viitelaskenta () on ohjelmointimenetelmä, jossa ohjelman varaaman muistin käyttöä seurataan viittauksien määrällä. Viittauksien määrän laskiessa nollaan (ei enää viittauksia) muisti voidaan vapauttaa ilman häiriötä ohjelman toiminnalle.

Viitelaskennan avulla viitatut kohteet voidaan vapauttaa heti kun niitä ei enää tarvita, toisin kuin jäljittävällä roskienkeräyksellä. Viitelaskenta on myös yksinkertainen tapa muistinhallinnan toteuttamiseen.

Ohjelmointikielet kuten C++ tarjoavat standardikirjaston avulla nk. älyosoittimia () eri tarkoituksiin, joista osa toteuttaa viitelaskennan (ks. C++11, std::shared_ptr).

LLVM/Clang kääntäjä tukee automaattista viitelaskentaa () mm. Objective-C kielen kanssa.

 Historia 
Automaattiseen muistin vapauttamiseen ehdotettiin vuonna 1960 viitelaskentaa  ja jäljittämismenetelmää (tracing) Jäljittämiseen perustuvat menetelmät ovat olleet siitä lähtien yleisempiä kuin viitelaskentaan perustuvat. Tilanne on myöhemmin muuttunut muistin ja laskentakyvyn suhteellisen kustannuksen muutoksen myötä.

Vuonna 1985 esitetyn artikkelin mukaan Lisp-ohjelmat käyttävät muistia kunnes muisti on käytetty ja ohjelma pysähtyy keräämään roskia, joka turhauttaa ohjelmoijia ja tutkijoita. Suuret Lisp-ohjelmat käyttivät 10-30 prosenttia suoritusajastaan roskien keruuseen. Ensimmäinen vaihtoehto muistin vapauttamiseen on ohjelmoijan ylläpitämä vapauttaminen. Toiseksi vaihtoehdoksi esitettiin viitelaskentaa, jolloin ohjelmoijan vastuu muistin vapauttamisesta poistuu. Viitelaskenta käyttää yhtä lisäkenttää laskuria varten, joka on positiivinen kokonaisluku. Laskuri pitää yllä montako viitettä kohteeseen on ja sen pudotessa nollaan kohde vapautetaan.

 Katso myös 
 Osoitin (ohjelmointi)

 Lähteet 

Luokka:Ohjelmointi