Kezdőoldal » Számítástechnika » Programozás » C++ ban mi a különbség a...

C++ ban mi a különbség a Stack és a Heap memória közt?

Figyelt kérdés
Helló! C++ -t tanulok, de a ahogy fogalmazott az oldal ahol néztem, kicsit számomra érthetetlenül fogalmazott. Sajnos sehol nem találtam rövid, érthető konkrét leírást. El tudnátok magyarázni egy kezdő számára?

2018. febr. 8. 23:49
 1/5 anonim ***** válasza:
79%

Ha egy változónak értéket adsz, az a Stack-re kerül. Ennek elég kicsi a mérete. Annyira, hogy pár ezernél több számot nem is tudsz tárolni rajta.

Ha nagy mennyiségű adatot akarsz tárolni, akkor a heap-et szokás használni. Ez úgy működik, hogy csak pointert tárolsz a stacken, és a pointer mutat a heapre. Mutatok pár példát, hogy megértsd:

int szam=5; //ez egy sima változó, a stacken tárolódik

int *p=&szam; //ez egy pointer, de stacken levő adatra mutat

int *tomb= new int[32]; //ez egy másik pointer, de ez egy olyan tömbre mutat, amit a heap-en tárolunk.

Heapre általában a new operátort használjuk, vagy lehetséges a c nyelvből megmaradt malloc-ot, bár nem szokás annyira.

Fontos, hogy amit heap-en lefoglalsz memóriát, azt kötelességed neked felszabadítani.

new esetén delete (vagy ha tömb, akkor delete[] ), malloc esetén free függvénnyel.

Remélem minden világos így.

2018. febr. 9. 00:11
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
34%

A stack-en tárolódik átmenetileg (!) a függvények visszatérési értéke, a statikus foglalású változók értéke valamint a jump-ok visszatérési címe.


A heap dinamikus memóriafoglalásra van, amikor mondjuk megnyitsz egy file-t, aminek előre nem is biztos, hogy ismert a mérete, vagy amikor dinamikus tömböt használsz.

2018. febr. 9. 08:53
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:

Még annyit az első hsz-hez, hogy a heap-re nem azért kerülnek dolgok, mert a stack ehhez kicsi (ez vicces), hanem azért mert a heap szerepe, működése eredendően más, mint a stack-é.


Az viszont igaz, hogy a heap-ben foglalt memóriát nekünk kell felszabadítanunk (van nyelv, ahol ez automatikus (garbage collector)), a stack viszont ilyesmit nem igényel, mi több, ahhoz hozzá sem szabad nyúlni.


Mind a heap, mind a stack mérete általában paraméterezhető. A stack simán lehet akár a heap többszöröse is, bár ez nem jellemző.

2018. febr. 9. 09:07
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
100%

+

A stack (verem) olyan memória, aminek a tetejére lehet pakolni új adatokat, szép sorban. Ez azért jó, mert az egyes függvények amikor meghívódnak, oda teszik pl. a lokális változójukat, ill. a függvényből visszatérés címe és visszatéréskor a visszaadott érték is oda kerül. Amikor ez meghív egy másik függvényt, az rápakolja erre a saját lokális változóit, és amikor visszatér, a verem tetejét lepucolja, és megint a hívó függvény változói lesznek felül. Tipikus LIFO (last in first in) szervezésű memória. Ezt a proginak az a része kezeli, amit a fordító mindig belefordít. (Pl. nyelvtől, fordítótól függhet, hogy a hívó vagy a hívott takarítja-e a stack-et, stb.)


A heap (vagy néhol memory pool, stb.) olyan memória, amit az operációs rendszer kezel, ő tud kiosztani valamennyi helyet, amennyit a futó progi kér. Kb. szabadon foglalható és felszabadítható benne hely, és a kért memóriához egy pointert ad a rendszer. A felszabadítás a memóriát kérő dolga.

2018. febr. 9. 14:39
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

** "LIFO (last in first in)"

LIFO (last in first OUT)

:)

2018. febr. 9. 14:40
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!