«« ( Date ) »» // «« ( Thread ) »» // ri4pp - 2006

"mali" problem

by Milan Aleksic
utorak, 06. jun 2006 - 00:04.

Malo veci problem na koji sam naisao i kako sam ga resio

U vezi je alokacije memorije...

Ovako ide cela stvar:

kada se alocira svaki objekat potrebno je preko new da se prosledi velicina
objekta u BAJTOVIMA, ok?
Nema nikakvih problema, uzmete broj elemenata u objektu (na primer 4
integera)
i mislicete da je potrebno da kazete "new 4", posto je de facto velicina
promenljivih u nasim programima po 1 bajt, ok? E, pa, nije tako.
Svakom polju u objektu se moze pristupiti preko getfield, a getfield
instrukcija
vraca poziciju iz heap niza koji je zapravo niz INTEGERA (4B elem).
Alokacija se vrsi u bajtovima, tacno je, ali se ocekuje da su se pazilo na
to
da je vrednost polja jednaka velicini integera!!!!!


:::odlomak iz Run.java:::

static int alloc (int size) throws VMException {
int adr = free;
free += ((size+3) >> 2); // skip to next free adr
// (>> 2 to convert byte to word)
if (free > heapSize) throw new VMException("heap overflow");
return adr;
}

----------------------------

Verovatno je zaostavstina od prethodne godine to sto se pretpostavlja
da getSize() klasa vraca u bajtovima, a da su promenljive tada bile 4bajtne
(to sam video
iz uputstva za VTABLE onog kolege koji je radio projekat) pa je cela stvar
mogla
da prodje.
Sada ne moze. Dolazi do memory access violation-a (samo sto ne postoji
mehanizam
koji vam to moze prijaviti) jer se vrsi prepisivanje mem. lokacija na heap-u
(npr. napravite niz nakon sto ste napravili objekat i desi vam se cudno
presnimavanje
polja u vasem objektu).

Resenje: nemojte da radite new A.size, vec A.size*4 kada alocirate objekte i
to je to

Nizovi rade bez problema jer se sve radi preko indeksa, nema greske ni pri
citanju
ni pri pisanju (svaki element niza je izdvojen u posebnu mem. lokaciju).

Vise puta sam proverio da li ima negde napisano upozorenje na ovako nesto
ali
nisam uspeo da pronadjem na vezbama/skriptama vec sam morao da dibagujem
Run.java
posto mi se program cudno ponasao.


pozdrav svima, nadam se da sam vam pomogao...

--
Milan Aleksić
WebGrafit: http://galeb.etf.bg.ac.yu/~aleksicm/webgrafit.php
email+jabber: milanaleksic@gmail.com
web: http://drop.to/goblin
ICQ: 53177884