Gradim stablo koje ce narasti na 100-tinjak megabajta i vise. Jasno, necu alocirati sve odjednom, no zanima me koja je optimalna velicina blokova memorije koje trazim od malloc-a.
Prva ideja je alocirati cvor po cvor. Cini se najprirodnije, no strah me da ce zbog jaaako cestog pozivanja doci do fragmentacije memorije. Pa bi rupe izmedju mogle popapati vise memorije nego iskoristeni dio.
Alternativa je alocirati u blokovima neke razumne velicine, recimo izmedju 100 Kb i nekoliko Mb. Unutra punim cvorove jedan za drugim dok ne potrosim blok, tek onda ponovo trazim memoriju od malloca.
Pitanje je zna li netko kako se to "standardno" radi? Jasno je da implementacija alociranja memorije nije stvar C-a nego ovisi o OS-u. Prema dosadasnjim eksperimentima na W2K isplati se alocirati u vecim blokovima, a za Linux nisam siguran. Zna li netko vise o tome?
Gradim stablo koje ce narasti na 100-tinjak megabajta i vise. Jasno, necu alocirati sve odjednom, no zanima me koja je optimalna velicina blokova memorije koje trazim od malloc-a.
Prva ideja je alocirati cvor po cvor. Cini se najprirodnije, no strah me da ce zbog jaaako cestog pozivanja doci do fragmentacije memorije. Pa bi rupe izmedju mogle popapati vise memorije nego iskoristeni dio.
Alternativa je alocirati u blokovima neke razumne velicine, recimo izmedju 100 Kb i nekoliko Mb. Unutra punim cvorove jedan za drugim dok ne potrosim blok, tek onda ponovo trazim memoriju od malloca.
Pitanje je zna li netko kako se to "standardno" radi? Jasno je da implementacija alociranja memorije nije stvar C-a nego ovisi o OS-u. Prema dosadasnjim eksperimentima na W2K isplati se alocirati u vecim blokovima, a za Linux nisam siguran. Zna li netko vise o tome?
_________________
Vedran Krcadinac
Ljudi su razliciti, a nula je paran broj.