Ich schreibe ein C-Programm und überschreite die Rekursionsgrenze über einen Segmentierungsfehler. Gibt es eine Möglichkeit, das Rekursionslimit des Programms zu erhöhen (z. B. durch Erhöhung der Stack-Größe), entweder über eine Option in GCC oder über eine Befehlszeilenoption? Das Programm läuft auf Ubunutu.Gibt es eine Möglichkeit, die Stapelgröße/Rekursionsgrenze zu erhöhen?
Antwort
Sie können die Stack-Größe auf Linux mit ulimit
ändern, zum Beispiel:
ulimit -s unlimited
unter Windows mit Visual Studio verwenden /F
option.
@iharob: Die Frage ist getaggt gcc, wenn es Windows wäre, wäre es wahrscheinlich getaggt mingw. –
'ulimit -s unlimited' macht die Stapelgröße nicht wirklich unbegrenzt. Es erlaubt nur die maximale Systemkonfigurationsgrenze zu verwenden. – wallyk
@PeterHorvath also danke, mir zu erklären, was in meiner Antwort falsch ist. – ouah
Die Stackgröße ist eine Funktion des Betriebssystems, obwohl viele frühere Betriebssysteme (MSDOS zum Beispiel) keine Programmstack-Segmentsteuerung durchgeführt haben: Es war Sache des Programms, ein ausreichend großes Segment zu reservieren.
Mit virtuellem Speicher und 32-Bit-APIs wird die Stapelgröße normalerweise durch einen Ressourcenverwaltungsmechanismus bereitgestellt. Unter Linux bietet beispielsweise der Befehl ulimit
eine Quelle für die Stapelgrößensteuerung. Andere Steuerungsebenen werden durch Mechanismen innerhalb des Kernel bereitgestellt, die Systemrichtlinien, Speicherbeschränkungen und andere Beschränkungen durchsetzen.
- 1. Gibt es eine Möglichkeit, die Quotenbeschränkungen für YouTube API v3 zu erhöhen?
- 2. Gibt es eine Möglichkeit, die BLE-Werbefrequenz in BlueZ zu erhöhen?
- 3. Gibt es eine Möglichkeit, die Anzeigegeschwindigkeit des SimpleModal-Dialogfelds in jQuery zu erhöhen?
- 4. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 5. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 6. Gibt es eine Möglichkeit, onPanResponderMove zu verwalten?
- 7. Gibt es eine Möglichkeit, Formularantwort zu ignorieren?
- 8. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
- 9. Gibt es eine Möglichkeit, Selektoren zu gruppieren?
- 10. Gibt es eine Möglichkeit, Kovarianz zu deklarieren?
- 11. Gibt es eine Möglichkeit, dies zu loopen?
- 12. Gibt es eine Möglichkeit, "träge" zu lesen?
- 13. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 14. Gibt es eine Möglichkeit, Webkonsolenfehler zu erkennen?
- 15. Gibt es eine Möglichkeit, Unterabfragen zu vermeiden?
- 16. Gibt es eine Möglichkeit, Creeps zu löschen?
- 17. Gibt es eine Möglichkeit, Typdeklarationen zu erweitern?
- 18. Gibt es eine Möglichkeit, Duplikate zu vermeiden?
- 19. Gibt es eine Möglichkeit, Mehrfacheinspritzung zu propagieren?
- 20. Gibt es eine Möglichkeit, AMDPlugin zu deaktivieren?
- 21. Gibt es eine Möglichkeit, PreparedStatement zu aktualisieren?
- 22. Gibt es eine Möglichkeit, die Vererbung einzuschränken?
- 23. Gibt es eine schöne Möglichkeit, einen optionalen Int zu inkrementieren?
- 24. Gibt es eine Möglichkeit, max_input_vars für PHP-Laufzeit auf IBM Bluemix zu erhöhen?
- 25. Gibt es eine Möglichkeit, Java-Heap-Speicher im Code selbst zu erhöhen?
- 26. Gibt es eine Möglichkeit, die Pixellänge einer Zeichenfolge zu berechnen?
- 27. Gibt es eine Möglichkeit, die C# -Bindung statisch zu machen?
- 28. Gibt es eine Möglichkeit, die Ausführung eines Prozesses zu verzögern?
- 29. Gibt es eine Möglichkeit, die textAlignment von UILabel zu animieren?
- 30. Gibt es eine Möglichkeit, die Anforderung von RenderBody() zu umgehen?
Sie meinen, dass Sie den Stack überlaufen und daher ein Segmentierungsfehler auftritt? –
@iharob: Ja, das habe ich mit 'gdb' verifiziert. – Claudiu
warum schreibst du es nicht iterativ? – saadtaame