Hej!
Jag undrar om det är möjligt att få StackOverflowException med en korrekt konstruerad rekursion. Alltså genom att anropa sig själv för många gånger helt enkelt (ingen oändlig loop, men var går den gränsen?)
Jag har lite C#-kod som jag kör i VS.NET 2005, och den kraschar när jag ger den större problem, men inte när den löser ett mindre.
Kan man kontrollera hur det är med stacken så att man kan avbryta/minska rekursionen under körning av programmet om stacken skulle ta slut?
Jag googlade runt lite och såg att det var massor som frågade efter just detta, men hittade inga konkreta svar förutom "är du säker att du inte gjort något fel 1 Mb borde räcka" (1 Mb skall tydligen vara standard).
Jag vet inte hur du skall göra kanske du skall använda exceptions för att avbryta men det känns ju inte som en bra lösning heller. Intressant om någon annan hittar svar på detta.
PMedlem sedan jan. 20012 204 inlägg 1 Mb är ju inte så mycket om man löser stora problem. Du skulle inte kunna skriva om koden till en "while-loop" istället?
PhorpherMedlem sedan feb. 20002 300 inlägg För att ändra stackstorleken så kan du köra:
editbin.exe /stack:<stacksize> dinbinär.exe
För övrigt så har .NET CLR stöd för något som kallas tailcall som rensar stacken när datat i den inte behövs längre. Tyvärr så genererar inte C#-kompilatorn en sån instruktion: http://www.cookcomputing.com/blog/archives/000200.html
Jag provade att begränsa hur många nivåer rekursionen fick hålla på, och kom fram till att 500 bara löste en liten del av problemet, och förmodligen skulle 4000 inte vara nog. Med de siffrorna kan man ju gissa att den icke-oändliga stacken kan ta slut =)