Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Anonymous
unregistriert
Quellcode |
|
1 2 3 4 |
Gültigkeitsbereich { pClass=new CClass(); } |
Quellcode |
|
1 2 3 4 |
Gültigkeitsbereich { CClass Class; } |
Du meintest sicherlich die Klasse. Denn ob die Klasse nun auf dem Stack landet oder auf dem Heap ist für die Methoden einer Klasse irrelewand.Zitat
Für jede Funktion wird ein Stackrahmen angelegt, dort werden alle lokalen variablen gespeichert.
Quellcode |
|
1 2 3 4 5 6 7 8 |
class A { .... }; class B : public A { .... }; int main(void) { B instance; A* p = &instance; } |
Quellcode |
|
1 |
A* p = new B(); |
Zitat
Du meintest sicherlich die Klasse.
Zitat
Denn ob die Klasse nun auf dem Stack landet oder auf dem Heap ist für die Methoden einer Klasse irrelewand.
Zitat von »"DragonMaster"«
Das der Speicher ausgeht ist eher unwarscheinlich bei heutigen Low Cost Rechnern. Wenn der Heap voll ist, wird einfach auf der Festplatte weiter gespeichert. Was natürlich extrem langsam ist. Sollte es denoch vorkommen, meldet sich das BS und nicht die IDE.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
... ... __try { // irgendwelche Operationen die einen Overflow verursachen könnten... } __except(GetExceptionCode() == STATUS_STACK_OVERFLOW) { _resetstkoflw(); // Diese Funktion setzt den Stack nach einem OVerflow wieder zurück. Das ganze liegt in cmallo/malloc.h(ist evtl. Win only; habs nicht probiert) } |
Du hattest geschriebenZitat
Womit meine ich die klasse?
Da sich der Thread auf Klassen bezieht, denke ich du meintest hier Klassen und nicht Funktionen.Zitat
Stack
Für jede Funktion wird ein Stackrahmen angelegt, dort werden alle lokalen variablen gespeichert.
Beim verlassen der Funktion werden sie atomatisch gelöscht.
:ohoh: wenn der Heap auf 1MB beschränkt wäre, wären 128MB Riegel wohl überflüssig ;D Wahr wohl ein kleiner gedanken Fehler.Zitat
hm, ich meine aber dass der Heap (auf 1 MB) begrenzt ist.
(kann natürlich sein, dass das nur im debug modus eines programms ist)
jedenfalls kann man dadurch endlosrekursionen verhinder.
Ja klar. Aber Samuel_G fragte ja ob sich das BS meldet oder die IDE. Wenn keine Aufangroutine Implementiert wurde meldet sich eben das BS und nicht die IDE. Es sei denn man ist grad mit dem Debugger am ArbeitenZitat
einen Stack Overflow kann man aber auch ziemlich einfach verhindern
Anonymous
unregistriert
Zitat
einen Stack Overflow kann man aber auch ziemlich einfach verhindern
Code:
...
...
__try
{
// irgendwelche Operationen die einen Overflow verursachen könnten...
}
__except(GetExceptionCode() == STATUS_STACK_OVERFLOW)
{
_resetstkoflw(); // Diese Funktion setzt den Stack nach einem OVerflow wieder zurück. Das ganze liegt in cmallo/malloc.h(ist evtl. Win only; habs nicht probiert)
}
}
Zitat
Da sich der Thread auf Klassen bezieht, denke ich du meintest hier Klassen und nicht Funktionen.
Zitat
wenn der Heap auf 1MB beschränkt wäre, wären 128MB Riegel wohl überflüssig Wahr wohl ein kleiner gedanken Fehler.
Die Exception wird ja geworfen (welche Spielt keine Rolle). Wo du diese dann auffängst ist egal. Du kannst eine Komplette Funktion in einen solchen Block spannen, oder auch das gesamte Projekt.Zitat
Klar, aber man kann ja nie wissen, wo jetzt der Stack Overflow auftreten wird, und man kann ja nicht bei jeder Variable Schreiben den ganzen Block zur Exception-Behandlung schreiben!
Werbeanzeige