Kezdőoldal » Számítástechnika » Programozás » Egy programban minden változón...

Feels kérdése:

Egy programban minden változónak és tömbnek előre le kell foglalni a memóriát, majd törölni őket?

Figyelt kérdés

Pl: int* a= new int;

*a=5;

delete a;

És ez nem 2 változót hoz létre,egy pointert és egyet amire mutat?Majd törlésnél kitörli azt amire mutat, de a pointerben megmarad a memóriacím akkor az nem ugyanaz mintha csak simán int a=5 ként hozzuk létre?

Illetve egy programban minden változót így kell létrehozni és törölni az optimális működéshez?

Köszönöm a válaszokat előre is.


2017. szept. 9. 18:58
1 2
 1/16 anonim ***** válasza:
63%

"Illetve egy programban minden változót így kell létrehozni és törölni az optimális működéshez? "


Mért kéne? Ha csak kell lokálisan egy int változó, akkro csak simán

int a;

2017. szept. 9. 19:49
Hasznos számodra ez a válasz?
 2/16 anonim ***** válasza:

A "new" a heap-en foglal memoriat. Ez egy nagyobb terulet, viszont itt fel kell szabaditani a hasznalat vegen a memoriat.


A stack-en ahogy kiersz a fuggvenybol, felszabadulnak az ott definialt valtozok.

2017. szept. 9. 20:02
Hasznos számodra ez a válasz?
 3/16 anonim ***** válasza:
100%

Úgy kell, ahogy a működéséhez optimális. Jól gondolod, a fent említett példa létrehoz egy pointert, és a pointer által mutatott címen egy int változót. Ez általában fölösleges, elég egyszerűen int a = 5; szintaktikával létrehozni egy változót. Ez a változó pedig magától felszabadul, ha lejár az élettartama (pl függvényen belüli lokális változó akkor, ha végetér a függvény futása).


Namost, ezek a lokális változók az ún. stack-en lesznek eltárolva, ez egy relatíve kisebb terület, és ha nagyon sok adatot tárolsz rajta (gondolok itt például hatalmas nagy tömbökre, vagy a végtelenségbe hajló rekurzív hívásokra) akkor a méltán híres "Stack overflow" hibával kerülsz szembe. Alapvetően nem kell ezzel foglalkoznod, mert extrém mértékű memóriahasználat kell ehhez.


Ott van viszont a heap is, ahova a new kulcsszóval létrehozott változók kerülnek. Ez mint már mondták, sokkal nagyobb, viszont a heap-en levő változók nem fognak automatikusan törlődni, azoknak a manuális törlésére neked kell odafigyelni.


Egy kis side note: Igazából majdnem mindig használod a heap-et, még ha nem is tudsz róla. A legtöbb container típus (pl vector) struktúrája tartalmaz dinamikus tömböt, ami a heap-en kerül tárolásra. Az objektum jelentős része a stack-en foglal helyet, de a magában foglalt dinamikus tagokat ezek is a heap-en tárolják. Ezzel viszont NEKED nem kell újfent foglalkoznod, mert ezek a containerek úgy vannak megírva, hogy 'elpakoljanak' maguk után.

2017. szept. 9. 20:18
Hasznos számodra ez a válasz?
 4/16 anonim ***** válasza:
53%
Annyit hozzátennék az előző válaszoló válaszához hogy a verem(stack) is egy adatszerkezet mint ahogy a vector is és pl a függvény lokális változói ebbe kerülnek bele a felszabadításukról pedig azért nem kell foglalkoznod mert a stack úgy van megvalósítva hogy ezt megtegye helyetted.
2017. szept. 9. 20:57
Hasznos számodra ez a válasz?
 5/16 anonim ***** válasza:
53%
Ezzel csak annyit akartam mondani hogy nehogy félre értsd mi az a stack. Nem valami plusz hely a számítógépeden ami más mint a dinamikus memória(ram), hanem egy adatszerkezet és a stack is és a változók amik bele kerülnek a stack ba is a dinamikus memóriában foglalnak helyet. Minden változó amit használsz az a ramban(d_memóriában) foglal helyet.
2017. szept. 9. 21:01
Hasznos számodra ez a válasz?
 6/16 anonim ***** válasza:
36%

Ha memóriafoglalásról beszélünk, akkor a stack és heap elsősorban nem mint adatszerkezet, hanem mint különböző memóriaterület értendő.

Úgyhogy az előző válaszoló nettó hülyeséget beszél.


Az eredeti kérdés pedig teljesen értelmetlen.

Program és programnyelv függő.

2017. szept. 9. 22:40
Hasznos számodra ez a válasz?
 7/16 Hominida ***** válasza:
Pontosan, a változóterülettel való gazdálkodást a programba fordított, erre szolgáló könyvtár, vagy a programot kiszolgáló motor végzi, tehát nem lehet egyetlen általános választ találni a kérdésre.
2017. szept. 10. 01:15
Hasznos számodra ez a válasz?
 8/16 anonim ***** válasza:
#6 A kérdésből elég egyértelmű, hogy C++ nyelvről van szó, attól hogy nem írta le. Ejnye, egy C++ fordító képes automatikus típus meghatározásra, te meg nem? :D
2017. szept. 10. 01:30
Hasznos számodra ez a válasz?
 9/16 anonim ***** válasza:

#8: ne hisztérikázz.

A kérdés úgy szólt, hogy "Egy programban...".

Attól, hogy utána egy példa C++-ban volt, nem jelenti azt, hogy minden program C++ lenne és az lenne a szentírás.

2017. szept. 10. 07:40
Hasznos számodra ez a válasz?
 10/16 A kérdező kommentje:
Valóban nem írtam ki, de C++ gondoltam.Köszönöm a válaszokat, bár az utolsók kicsit ellentmondásosak.
2017. szept. 10. 13:03
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!