Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Der Gottverdammte Stackspeicher

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]
010
02.08.2005, 22:38 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wie ich in deinem doppelpost schon erwähnt hatte:


Zitat:

naja, du kannst dir den stack wie ein stapel z.b von cds überlegen, da sie alle übereinander liegen kannst du immer nur auf das oberste element zugreifen und dieses auch herunternehmen oder einen neues oben drauf legen. Wenn du in der mitte eine CD raushaben willst musst du bei dem Stapel mit den CD's auch erstmal die oberen runterräumen.



Beim PC hängt es eben von der Rechnerarchitektur ab wie rum was auf den Stack kommt, jedoch ist es immer so das man nur Zugriff auf den Anfang hat. Da man normalerweise mit dem "eigentlichen" Stack nie in Berührung kommt ist das auch relativ unwichtig.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
02.08.2005, 22:46 Uhr
~Nur mal so
Gast


@FloSoft
Was meinst du mit der Aussage, dass man nur Zugriff auf den Anfang hat ?
Ich kann doch den Stack relativ zum Stackpointer adressieren, und somit habe ich auch Zugriff auf Elemente, die nicht am Anfang liegen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
02.08.2005, 22:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ja das ist klar ich meinte halt du weißt halt nicht wieviele elemente "da rumliegen" sondern immer nur ein element siehst, außer due verschiebst den Stackpointer. Nur das ist dann sog. "rumpfuschen". Wenn man z.b nen simplen Stack mit Variablen bastelt gibts nur push & pop, also push ein element drauf, pop das oberste runter. Und das macht den eigentlichen Stack ja aus.

Ansonsten wenn man die Analogie mit den CD's nimmt, wär es ein ewig hoher Stapel, den man eben an beliebiger Stelle zwar hochheben kann, aber nicht größere Stücke "rausreißen" kann.
--
class God : public ChuckNorris { };

Dieser Post wurde am 02.08.2005 um 22:54 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
02.08.2005, 23:07 Uhr
(un)wissender
Niveauwart


@virtual
Der Stack wächst i.d.R. von oben nach unten, bei x86 auf jeden Fall.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
03.08.2005, 01:11 Uhr
kanonenvirus



Also wenn ich jetzt sagen wir mal mit einem Stack anfange würde der Ganz leer ist und dann eine vriable draufpacke, dann würde es doch so aussehen:

(Adresse 1) Variable 1


Packe ich noch zwei drauf dann wird es so aussehen:

(Adresse 1) Variable 1
(Adresse 2) Variable 2
(Adresse 3 ) Variable 3


Oder wird es anders rum gestappelt bei Stack? Vielleicht so?



(Adresse 1) Variable 1
--------------------------------------------------------------------
(Adresse 1) Variable 2
(Adresse 2) Variable 1

Oder auch so sagen wir mal wir fangen von der ganz untersten bzw. von der größten Adresse an(ich nehme einfachmal 100)

95.
96.
97.
98.
99.
100. Variable 1

Wenn man noch eine draufpackt dann sieht es so aus



95.
96.
97.
98. Variable 1
99. Variable 2
100. Variable 3


Oder sieht es so aus?

95.
96.
97.
98. Variable 3
99. Variable 2
100. Variable 1

Bitte sagt mir einfach nur welche Variante die richtige ist.


Und wenn Ihr wisst welche di richtige ist sagt mir auch bitte welche Variable man als ersten wegräumen soll, die von oben oder von unten(ich will nicht hören von der mitte oder so). Dankeeeee
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
03.08.2005, 06:37 Uhr
(un)wissender
Niveauwart


virtual hat dir doch Code gezeigt. Der sollte das beantworten...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
03.08.2005, 07:29 Uhr
Tommix




Zitat von (un)wissender:
Der Stack wächst i.d.R. von oben nach unten, bei x86 auf jeden Fall.

'Morgen,
die Begriffe "oben" und "unten" auf physische Speicheradressen zu beziehen, ist doch völlig willkürlich. Ich habe noch nie gehört, daß jemand sagt, das zuletzt abgelegte Element läge "unten auf dem Stapel". Bei std::stack heißt die entsprechende Methode doch auch top() und nicht bottom().

Gruß, Tommix

--
1
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
03.08.2005, 10:15 Uhr
(un)wissender
Niveauwart


Nö, ist nicht willkürlich. Außerdem reden wir hier vom Systemstack, nicht von einem Container.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
03.08.2005, 10:56 Uhr
RHBaum



@kanonenvirus

Also wenn Du laenger in der DV Szene verbleiben willst, und nicht vorzeitig an einen gesicherten Ort gebracht wirst wo Du die rosa Hamster zaehlen kannst die um deinen Kopf schwirren, dann mach dich mit dem BlackBox/Microsoft prinzip vertraut ...

es ist vollkomen wurscht wie es funktioniert, hauptsache es tut das so wie es beschrieben ist, wenn nicht, dann ruf sofort Deine Anwaelte an, die kümmern sich dann drum :-)

Im ernst, die beschreibung da iss schon etwas ... strange, es wird was versucht bildhaft zu erklaeren, was bisserl unguenstig gelaufen ist.

Fuer dich ist eigentlich nur wichtig:
- Auf die stackverwaltung hasst kein zugriff ! dir iss volkommen wurscht, was wie wo gespeichert wird, wichtig iss nur, dass es gespeichert wird. Das ist eh sache des compilers, und jeder machts da anders ....
- Stack heist das deswegen, weil die Speicherobjecte nach dem FiLo (first in, last out) prinzip, so wie der programmablauf ist, halt da in dem speicher abgelegt werden. Warum filo ? schau dir mal an, wie eintritts und austrittspunkte von c/c++ bloecken sich im programmablauf verhalten (logisch oder ? )
- durch das obige Prinzip kann Stack Speicher niemals fragmentieren, im gegensatz zu dynamischen speicher, und kommt damit ohne jeglichen speichermanager aus. einfach nen zeiger auf das aktuelle stackende langt volkommen ... um neuen speicher zu allokieren und bei blockende wieder zurueckzurollen ..... Damit wird Stackspeicher sehr schnell allokiert ... (vergleich Heap / Freestore)
- die Stackgrenzen sind plattformabhaengig ..... unter linux hasst fasst den kompletten freien arbeitsspeicher zur verfuegung, bei windows gibt es fest definierte stack grenzen ... auch noch bei 32 bit windows ...

hoffe das hilft ein bisserl ....

Ciao ...

Dieser Post wurde am 03.08.2005 um 10:59 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
03.08.2005, 11:01 Uhr
Tommix



@(un)wissender:
Doch ist es (nun laß mich doch auch mal Recht haben).
Bei der dem Ganzen zugrunde liegenden bildlichen Vorstellung eines Stapels von Kisten, Spielkarten usw. ist oben immer oben. Man legt doch nichts "unter den Stack".
@kanonenvirus:
Kannst Dir evtl dies mal ansehen:
http://de.wikipedia.org/wiki/Stapelspeicher

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: