[ NrmMyth @ 09.08.2006. 07:05 ] @
Zanima me literatura na temu memory-managmenta. Kako se vrsi alokacija, reprezentacija objekata u memoriji, reprezentacija blokova alocranog prostora i sl.
Trima rijecima memory-mamagment ispod haube. Za windows i linux.
[ bkaradzic @ 09.08.2006. 07:11 ] @
http://g.oswego.edu/dl/html/malloc.html
[ tosa @ 09.08.2006. 09:19 ] @
Ovaj sjajni memory manager je default implementacija malloc-a na linux-u i mnogim drugim
platformama (uključujući čak i neke game konzole).
[ NrmMyth @ 09.08.2006. 23:49 ] @
Dobar clanak.

Primarno me interesirala informacija pod nazivom "Boundary Tags".

Hvala.

Usput kakav je alokator kod VC++7.1?
[ NastyBoy @ 10.08.2006. 01:19 ] @
Pogledaj ovu temu : http://www.elitesecurity.org/t163853
Pomenute su neke informacije kao i dve knjige koje se bave ovom tematikom (tj. druga knjiga, link u zadnjem postu).

Boundary Tags (ako je to uopshte bilo pitanje) - to vec zavisi od implementacija. Roughly, kada alocirash blok memorije svaki alokator (sem u ekstremnim sluchajevima memory-poolova gde je vazhan svaki bajt) dodaje oko tog bloka josh neke informacije, nekada samo ispred bloka, nekada sa obe strane. Boundary Tags (ili Guard Bands kako ga neki zovu) su zapravo informacije koje alokator ostavlja samom sebi za haus-kiping (npr. duzhina korisnog alociranog bloka se upisuje ovde, kako bi dealokator znao shta zapravo da radi sa pozivom free(buffer) )

Alokator u VC7.1? Jako neprecizno pitanje. U sushtini, kompajleri koriste alokatore koji su obezbedjeni u standardnom libu, a to je mapirano na alokator koji obezbedjuje sam operativni sistem. Znachi nije neshto shto bi zheleo da koristish ako planirash da treshirash memoriju sa gomilom de/alokacija male velichine :)


[ NrmMyth @ 10.08.2006. 03:02 ] @
Hvala. ;)
[ tosa @ 10.08.2006. 08:06 ] @
Još jedan savet u vezi alokacija memorije bi bio da probaš sledeće:
Za svaki new/malloc i delete/free zapišeš adresu i veličinu bloka u neki log fajl.
Analiziranjem tog fajla možeš naći ogroman broj privremenih alokacija, tj. alokacija
koje se oslobode u istom bloku koda. To su najčešće neke lokalne promenljive.
Ovim metodom sam u projektu na kome radim srezao alokacije sa nekih 650.000 na
oko 70.000. Drastična razlika u brzini programa.

Kako ćeš handle-ovati te privremene alokacije zavisi od programa na kome radiš.
Možeš da kreiraš pool-ove fiksne veličine (pošto već znaš kakve će se alokacije desiti),
ili da koristis alokacije sa steka. Kao što rekoh, sve zavisi od potreba.
[ NrmMyth @ 10.08.2006. 19:46 ] @
Primio na znanje, ali dosad mi se nikada nije dogodilo da je alokacija i blizu bottlenecka, jer uvijek rezerviram komad memorije koji se kasnije raspodijeli.