Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 5.204 pregleda

Najnovija ↓

objekat na staku ili heapu? 04.08.2007. u 22:12 · pre 234 meseca #1
Code:

class test
{}
int main()
{
      test t1; //jel t1 sada na steku ili heapu?
      // test t1 = new test();         jel ovo znaci nesto?
}


Nabasao sam na nesto, sa new keyword mogu da rezervisem mesto na heapu, ali primer je sa pokazivacem, cat *pCat = new cat, ovo je valjda objekat na heapu, ali gde je onda ovaj objekat "t1" iz prethodnog koda?
Re: objekat na staku ili heapu? 05.08.2007. u 00:10 · pre 234 meseca #2
Dinamička dodela (sa new) ide na heap, dok ostalo ide na stack.

P.S.
Samo što si u tvom primeru za dinamičku dodelu zaboravio jednu pointer zvezdicu (izgleda da te je .NET totalno očarao).
Re: objekat na staku ili heapu? 05.08.2007. u 01:48 · pre 234 meseca #3
Kada koristi STL, prostor se takođe rezerviše na heap-u. Naravno, to je zato što u tim šablonima "čuče" new naredbe.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: objekat na staku ili heapu? 05.08.2007. u 03:22 · pre 234 meseca #4
Citat:
Nedeljko: Kada koristi STL, prostor se takođe rezerviše na heap-u. Naravno, to je zato što u tim šablonima "čuče" new naredbe.


Svejedno. Kad deklarišeš npr vector na steku, on je na steku. Interno je sadržaj naravno na heapu (mada i ne mora da bude - možeš da koristiš custom allocator), ali te to najčešće ne interesuje. Objekat je uništen na izlasku iz opsega i sva memorija automatski počišćena.
Potpis
IOCC
Re: objekat na staku ili heapu? 05.08.2007. u 14:04 · pre 234 meseca #5
Citat:

...zvezdicu (izgleda da te je .NET totalno očarao).

Ehhh...
dobro znaci:
Code:

test t1(); // ovo je na steku
test *t1 = new test(); //sa ovim alociram memoriju na heapu, nadam se da sam u pravu :)

Posto do sada jos nisam naleteo na primere u c++ gde se radi ovo sa heapom vec samo "test t1 // primer", onda me zanima kada je bolje koristiti prvi a kada drugi(dinamicki) nacin instanciranja objekta?
Re: objekat na staku ili heapu? 05.08.2007. u 16:45 · pre 234 meseca #6
Citat:
Valerij Zajcev: Ehhh...
Code:

test t1(); // ovo je na steku



Samo izbaci te zagrade, inače će kompajler tu liniju da protumači kao deklaraciju funkcije t1 koja vraća objekat tipa test.

Citat:
Valerij Zajcev: kada je bolje koristiti prvi a kada drugi(dinamicki) nacin instanciranja objekta?


Najprostije moguće: kad god možeš deklariši ga na steku, a kad ne možeš onda na heap-u.
Potpis
IOCC
Re: objekat na staku ili heapu? 05.08.2007. u 18:01 · pre 234 meseca #7
Citat:
Dragi Tata: Svejedno. Kad deklarišeš npr vector na steku, on je na steku.

Objekat tipa vector je na steku, ali sadržaj vektora je naravno na heap-u, kao što i sam kažeš. Međutim, u principu taj sadržaj zauzima više prostora od samog objekta tipa vector.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: objekat na staku ili heapu? 09.08.2007. u 22:01 · pre 234 meseca #8
vector nije nista drugo nego "fensi lista". Lista je gomila pointera, pa su svi podaci zapravo na heap-u.
Citat:
Dragi Tata: Najprostije moguće: kad god možeš deklariši ga na steku, a kad ne možeš onda na heap-u.


Samo pazi na velike nizove i teraj ih na heap.
Potpis
De si Deda...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme