Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Boost.Pool i memorijski alokator

[es] :: C/C++ programiranje :: Boost.Pool i memorijski alokator

[ Pregleda: 3533 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.verat.net.



+9 Profil

icon Boost.Pool i memorijski alokator28.02.2006. u 22:34 - pre 221 meseci
Da li bi neko mogao da mi objasni šta se zapravo dešava kada se alocira memorija za neki objekat na heapu? Dakle, ako učinim sledeće:

Code:

  int *x = new int;


Pretpostavljam da se rezerviše određeni prostor (blok) koji je zapravo veći od sizeof(int).

Kakva je struktura tog bloka?
Koje informacije su sve upisane?
Da li je negde upisana i veličina tog bloka i gde, etc..?

I..da li bi neko mogao da mi sažetije objasni koje bi jos eventualno bile mane memory poola sem one da se blok mora podeliti na chunkove iste veličine?

Koliki je overhead kod memory poola s obzirom da se koristi i vezana lista koja spaja slobodne chunkove? I..neki uporedni prikaz (na nekom primeru recimo) overheada kod poola i klasičnog alociranja na heapu?
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: Boost.Pool i memorijski alokator28.02.2006. u 23:09 - pre 221 meseci
Ovo sve pitash generalno, ili konkretno za Boost::pool ?

Pisati memory-allocator-e je nauka za sebe, i ne postoji jedan nachin alokacije koji bi zadovoljio sve potrebe.

Zashto koristiti Boost::pool (ili bilo koji drugi pool-allocator) ti je objashnjeno na samom sajtu ( http://www.boost.org/libs/pool/doc/index.html. "Why/When should I use Pool").

Ukratko, pool-alloc se koristi uglavnom kada se zahteva veliki broj alokacija za objekte male (fiksne!) velichine. Standardni memory-allocator u sklopu OS-a jednostavno nije dobar za ovakve stvari. Korishcenjem pool-a dobijash na brzini i na osetnom smanjenju fragmentacije memorije (veoma bitno). Memory-allocatori uglavnom koriste linked-list da bi drzhali slobodne blokove na okupu, i taj overhead (koji i ne mora da postoji, zavisno od implementacije) ne bi trebao da te preterano brine (osim ako ne radish na nekom embedded sistemu sa jako malo memorije), usotalom i alokator u samom OS-u koristi isti princip.

Za detalje kako to implementira Boost (posebno obrati pazhnju na memory-alignement za alocirane blokove) pogledaj na samom Boost sajtu, i vishe je nego detaljno objashnjeno.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.hsd1.ma.comcast.net.



+6 Profil

icon Re: Boost.Pool i memorijski alokator01.03.2006. u 02:22 - pre 220 meseci
Citat:
NastyBoy:
Ukratko, pool-alloc se koristi uglavnom kada se zahteva veliki broj alokacija za objekte male (fiksne!) velichine. Standardni memory-allocator u sklopu OS-a jednostavno nije dobar za ovakve stvari. Korishcenjem pool-a dobijash na brzini i na osetnom smanjenju fragmentacije memorije (veoma bitno).


OT: jesi li koristio nekad Alexandrescu-ov Small Object Allocator? Baš me zanima kako to fercera u praksi, a nikad nisam probao. Ovde ima i adapter tog alokatora na std alokator:

http://www.codeproject.com/cpp/allocator.asp
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: Boost.Pool i memorijski alokator01.03.2006. u 02:51 - pre 220 meseci
Nisam direktno koristio bash taj, jer sam slichne alokatore do sada pisao barem 10 puta :) Detaljno ga prouchio, ali nisam nashao nishta ekstra novo, sem shto je Alexandrescu, po obichaju, bio veoma pedantan i razmotrio sve moguce primene, probleme sa smart-pointerima i slichno. I naravno, sve zachinio templejtima :)

U principu, kada radish na mashinama sa ogranichenom memorijom (kao shto su, recimo, konzole za igru) prvo stupa na scenu memory-management. Kod "obichnih" desktop aplikacija to pitanje kasnije dolazi na red, ako ikada. Recimo, na trenutnom projektu imamo ukupno 7 razlichitih strategija za alokaciju (ili "policy-a" shto bi rek'o Andrei), od kojih 5 koriste fiksne memorijske blokove (Pool-ove), a 2 su "general purpose" za alokacije koje ne zahtevaju brzinu i striktnu kontrolu (i koriste standardni "best-fit" algoritam).

Ova knjiga je dobra za pogledati ako vas interesuje memory-management (mada ide u shirinu oko nekih stvari, i dalje je dobro shtivo)

[Ovu poruku je menjao NastyBoy dana 01.03.2006. u 03:52 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: Boost.Pool i memorijski alokator

[ Pregleda: 3533 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.