[C++] Memory allocation, korte vraag (beginner)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey,

Deze week ben ik begonnen met het lezen van een C++ tutorial (Thinking in C++, http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html). Toen ik over declarations en definitions van variabelen las kreeg ik het idee dat het geheugen pas toegewezen wordt op het moment dat de 'definition' gegeven wordt. De volgende pagina geeft aan dat mijn idee fout is: http://www.gnu.org/s/libc...ory-Allocation-and-C.html , stukje over 'static allocation'. Blijkbaar wordt het geheugen voor de variabelen tijdens het starten van je programma al toegewezen (anders zou Dynamic memory allocation met 'new' en 'delete' misschien ook niet bestaan).

-Maar hoe zit het dan met de definitie van variabelen in een if/else if/else statement? Wordt voor die variabelen tijdens de start van het programma ook geheugen toegewezen? Het programma kan tijdens het starten niet bepalen of die variabelen nodig zullen zijn dus ik neem aan dat ze voor de zekerheid wel toegewezen worden, ook al heb je ze misschien niet nodig?

-Variabelen kan je tijdens het uitvoeren van je programma dus alleen verwijderen (door bijvoorbeeld een scope te verlaten)?

Zou iemand me een toelichting kunnen geven of de punten die ik aanstipte goed zijn? Als je een willekeurige C++ tutorial doorleest dan wordt je eerst helemaal platgegooid met een heleboel informatie voordat je echt aan de slag kan. Het zou heel goed kunnen dat ik ergens een stukje wat mijn vraag beantwoord niet goed heb geinterpreteerd. Hopelijk kan iemand me de goede richting opwijzen :) Alvast bedankt in dat geval.

mvg Bram

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

In het algemeen betekent een declaratie van X "er bestaat een X", terwijl een definitie van X betekent "hier is een X". Maar het stukje dat jij mist is dat de context waar de definitie of declaratie in staat erg belangrijk is.

Zo zal een definitie in de global scope idd meteen geheugen reserveren voor die variabele. Maar voor een definitie (zonder static) in block scope (in een functie) wordt er pas geheugen gereserveerd op het moment dat de functie wordt aangeroepen (zeg maar als je programma pas bij dat statement is aangeland) en weer vrijgegeven als de variabele uit scope gaat. Is die variabele echter als static gedefinieerd, dan gedraagt hij zich net als globale variabelen, met het verschil dat hij alleen zichtbaar is binnen het huidige blok (en hij pas wordt geïnitialiseerd als het programma voor de eerste keer bij het statement is aangeland).

Voor declaraties/definities in classes en structs geldt dat voor non-static variabelen de declaratie ook meteen de definitie is, en dat het geheugen wordt gereserveerd zodra je een dergelijk object aanmaakt. Static variabelen zijn daarentegen alleen declaraties, waarvan je nog een definitie moet geven.

En eigenlijk is dit hele verhaal heel logisch als je je inbeeld wáár de variabelen precies terecht komen. Van variabelen in global scope, static in een functie of static in een class is er maar 1 globale versie. Non-static variabelen in functies leven op de stack en zijn dus tijdelijk van aard. Non-static variabelen in classes leven weer in de instantie van die class, en hebben dus ook de plek en de lifetime van de instanties van die class.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor het antwoord! het is nu iets helderder voor me. Veel tutorials vertellen trouwens ook niet veel over het verschil tussen de stack en de heap. Alleen dat verschillende gebieden in het geheugen gebruikt worden (je krijgt niet echt een idee van wat er nou gebeurt in het geheugen). Op dit moment lees ik de volgende pagina, http://www.learncpp.com/c...9-the-stack-and-the-heap/ . Hier wordt nader ingegaan op de heap en de stack. Misschien dat andere mensen die deze topic lezen hier nog wat aan hebben.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 22:43
Om een compleet beeld te krijgen: http://www.gotw.ca/gotw/009.htm met de verschillende plekken waar jouw variabele terecht kan komen ( oa dus stack en heap )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.