Jeg vil gjerne vite hva som er forskjellen mellom statisk og dynamisk minnetildeling?
Kan du forklare dette med et eksempel?
Det finnes tre typer allokering - statisk, automatisk og dynamisk.
Statisk allokering betyr at minnet for variablene dine allokeres når programmet starter. Størrelsen er fast når programmet opprettes. Dette gjelder for globale variabler, filomfangsvariabler og variabler som er definert med static
inne i funksjoner.
*Automatisk allokering av minne skjer for (ikke-statiske) variabler som er definert i funksjoner, og lagres vanligvis på stakken* (selv om C-standarden ikke krever at det brukes en stakk). Du trenger ikke å reservere ekstra minne ved å bruke dem, men har til gjengjeld begrenset kontroll over levetiden til dette minnet. F.eks. er automatiske variabler i en funksjon bare der til funksjonen er ferdig.
void func() {
int i; /* `i` only exists during `func` */
}
Dynamisk minneallokering er litt annerledes. Du kontrollerer nå den nøyaktige størrelsen og levetiden til disse minneplasseringene. Hvis du ikke frigjør dem, vil du få minnelekkasjer, noe som kan føre til at programmet krasjer, siden systemet på et tidspunkt ikke kan allokere mer minne.
int* func() {
int* mem = malloc(1024);
return mem;
}
int* mem = func(); /* still accessible */
I det øverste eksemplet er det allokerte minnet fortsatt gyldig og tilgjengelig, selv om funksjonen er avsluttet. Når du er ferdig med minnet, må du frigjøre det:
free(mem);
Statisk minnetildeling:
**Dynamisk minneallokering
Statisk allokering av minne. Allokert minne vil være i stakken.
int a[10];
Dynamisk minnetildeling. Allokert minne vil være i heap.
int *a = malloc(sizeof(int) * 10);
og sistnevnte skal frigjøres siden det ikke finnes noen Garbage Collector (GC) i C.
free(a);