[so] Folosirea shared memory

Lucian Adrian Grijincu lucian.grijincu at gmail.com
Sun Apr 12 19:28:49 EEST 2009


2009/4/12 Bogdan Sass <bogdan.sass at catc.ro>:
>   2) Folosesc alocare dinamica. Asa ar fi normal, si asa as implementa un
> hashtable in absenta restrictiei. Dar am vreo metoda sa conving malloc sa
> imi dea memorie _din zona partajata_? (cautand pe 'Net, am gasit doar ce e
> aici: http://linux.die.net/man/3/mm . Si recunosc ca nu stiu nici cum se
> foloseste asa ceva, nici pe ce sisteme e suportat, nici daca e permis in
> tema :) ).

Nu mă pronunț în partea de alocare statică, se va pronunța unul din
responsabili de această temă.

Dacă mergi pe alocare dinamică, fii conștient că nu vei putea utiliza
pointeri absoluți în memoria partajată întrucât adresele de la care
începe să fie mapată această zonă sunt diferite în procese diferite.

malloc & co. nu vor aloca din această zonă.

Trebuie să-ți implementezi un sistem de alocare/dezalocare propriu. De
ex. poți considera o parte inițială a memoriei o zonă de meta-date în
care ții informații despre ce ai alocat, ce e liber, etc. și restul
memoriei îl poți împărți în bucăți de dimensiune fixă pe care să ții
șiruri. În zona de metadate identifici blocurile astea prin numere de
ordine, iar când le accesezi trebuie să faci ceva de genul
   *(addr_start_date + nr_ordine * sizeof(dimensiune_obiect))

Informația despre blocuri alocate/libere o poți păstra așa cum e
ținută în unele sisteme de fișiere: un vector de biți: bitul X == 0/1
înseamnă blocul de date X este liber/ocupat.

Și alte abordari pot fi valide.

-- 
 .
..: Lucian


More information about the so mailing list