Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Neutral General,
8. Dez 2017
Das ist unmöglich. Für Daten die auf dem Stack abgelegt werden gibt es nach der aktuell laufenden Prozedur keine Garantie dass diese nicht überschrieben werden.
Eher im Gegenteil: Die Daten werden mit ziemlicher Sicherheit früher oder später überschrieben.
Dazu kommt noch, dass man den Speicher auf dem Stack am Ende einer Prozedur freigeben muss oder man zerschießt sich den Stack. Das ist aus...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Neutral General,
7. Dez 2017
Bin mir zu 99% sicher, dass jeder Heap so arbeitet und sich anfangs erstmal einen Vorrat an Memory Pages vom Kernel anfordert den er dann selbst verwaltet.
Also switches zum Kernel sollten auch beim Heap relativ selten sein. Und je nachdem wie der Heap verwaltet wird ist das Anfordern oder/und (?) Freigeben von Speicher sogar O(1).
Klar ist es immer noch aufwendiger als grad den Stackpointer...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Neutral General,
7. Dez 2017
Damit der Performanceunterschied groß genug ist um ihn zu merken muss es aber entweder um große Mengen von Objekten gehen (Achtung, es wird eng auf dem Stack!) oder die Prozedur wird sehr oft in sehr kurzer Zeit aufgerufen, sodass sich der Unterschied irgendwann aufsummiert und bemerkbar wird.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Neutral General,
7. Dez 2017
In meinen Augen ist der Stack nicht dazu gedacht dort komplette komplexe Objekte abzulegen.
Das kann je nachdem auch ganz schnell in die Hose gehen bei Rekursionen oder einer großen Menge Objekte.
Der Stack ist im Vergleich zum Heap winzig.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Neutral General,
7. Dez 2017
Und wo sonst noch? Und wer benutzt/macht das?
Ich denke C++ ist in der Hinsicht eher "unnatürlich".