Mikor kell memóriafoglalást használni?
E kettő között mi a különbség és hol érdemes a memóriafoglalást használni?
char str1[128];
strcpy(str1, "string1");
char *str2 = (char*) malloc(128);
strcpy(str2, "string2");
free(str2);
Illetve a memloc, calloc, realloc ugyanazt a funkciót hajtják végre csak másképp lehet megadni bennük, hogy mennyi területet foglaljanak le a memóriában?
És a memória foglalás az a RAM-ban történik meg vagy a HDD-ben esetleg valahol máshol?
Még csak nem rég kezdtem el foglalkozni a c nyelvel és ezeket a memóriafoglalásos dolgokat nem nagyon értem.
És még annyit, hogy a memóriaszivárgás az az amikor elfelejtünk felszabadítani egy lefoglalt memória részt?
És ha igen akkor ez a program leállása után felszabadul automatikusan ami nem lett felszabadítva vagy a programleállás után is lefoglalva marad az a memóriarész?
Például ha be akarsz vinni a programodba egy stringet, akkor valamilyen char típusú többe el kell tárolni. Na de ha nem tudod, hogy mekkora legyen a maximális méret, akkor nem tudsz ilyen tömböt megadni, csak hasraütésszerűen valamekkorát megadsz azon az alapon, hogy jóleszazúgy. De ha például nanoszámítógépek szoftvereit kell írni (IoT rendszerek esetében különösen fontos), akkor elég fontos a memóriával takarékoskodni költségvetési okok miatt. Ekkor nem teheted meg, hogy egy tetszőleges nagy számot adsz meg, hanem pontosan akkorát kell megadnod, amire szükséged van. Amennyiben ezt nem tudod előre, akkor kénytelen vagy dinamikus memóriafoglalást végezni.
Természetesen ha bezárod a programot, akkor minden memóriát visszakap az oprendszer.
A RAM-ban három helyen tárolhatod a változókat: lokális változóban, globális változóban, dinamikus memóriában.
A dinamikus memóriában akkor kell tárolni, amikor se lokális változóban, se globális változóban nem jó megoldás tárolni egy változót.
A lokális változónak az a hátránya, hogy csak kevés adatot lehet benne tárolni.
A globális változónak az a hátránya, hogy a program kezdetétől a program végéig foglalja a memóriát.
Mind a kettőnek az a hátránya, hogy már fordításkor tudni kell, hogy mennyi memóriát akarsz lefoglalni.
A memloc, calloc, realloc szintén dinamikus memóriakezelő funkciók.
Igen, a memóriaszivárgás az az amikor elfelejtünk felszabadítani egy lefoglalt memória részt.
A program leállása után az operációs rendszer automatikusan felszabadítja amit a hibás program nem szabadított fel. De te ne írjál hibás programokat. Mindíg szabadítsd fel azt a memóriát, amit te feglaltál le.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!