25: Minnisúthlutun Flashcards
Kvik minnisúthlutun
malloc og free
Forritarar nota minnisúthlutara
(eins og malloc) til að ?
fá sýndarminni á keyrslutíma
Minnisúthlutarar (dynamic
memory allocators) sjá um?
svæði í sýndarminni sem kallast kös (heap).
Hvernig virkar Kvik minnisúthlutun?
Úthlutari skipuleggur kösina sem safn af misstórum
blokkum, sem eru annaðhvort úthlutaðar (allocated)
eða lausar (free)
Þegar kemur beiðni um nýja blogg þá finnur hann lausa blokk og lætur hana af hendi
Tvær gerðir úthlutara:
Bein úthlutun og óbein úthlutun
Hvað er Bein úthlutun: ?
notendaforrit úthlutar og losar minni
* Til dæmis: malloc og free í C
Hvað er Óbein úthlutun?
notendaforrit úthlutar, en losar ekki
minni
* Til dæmis new og ruslasöfnun í Java
malloc pakkinn
include <stdlib.h></stdlib.h>
void *malloc(size_t size)
skilar bendi á void, forritarinn skilar sjálfur bendi á þá tegund sem hann vill fá
Þegar malloc heppnast
Þá fáum við bendi á minnisblokk með stærð a.m.k. size bæti uppröðuð
(aligned) að 16 bætum (á x86-64)
Þegar malloc heppnast ekki
Skilar NULL (0) og setur errno sem ENOMEM
void free(void *p)
Skilar blokkinni sem p bendir á, í safn lausra minnisblokka
lykilatriði : p verður að koma frá fyrra kalli á malloc eða realloc
calloc:
útgáfa af malloc sem upphafsstillir blokkina sem 0
realloc:
breytir stærð á áður-úthlutaðri minnisblokk
sbrk:
innra fall í úthlutara, til að breyta stærðinni á kösinni
Takmarkanir
Geta gert alls konar runur af malloc og free köllum, vitum ekki í hvaða röð þau koma
Getum ekki ráðið fjölda eða stærð úthlutaðra blokka
Verðum að svara malloc köllum strax og getum ekki umraðað beiðnum
Verður að úthluta blokkum úr lausa minninu
Úthlutaðar blokkir verða að uppfylla uppröðunarskilyrði
Getur aðeins unnið með og breytt lausa minninu
Getur ekki fært blokkir eftir að þeim hefur verið úthlutað