2015-01-23 4 views
5

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?

+0

Sie meinen, dass Sie den Stack überlaufen und daher ein Segmentierungsfehler auftritt? –

+0

@iharob: Ja, das habe ich mit 'gdb' verifiziert. – Claudiu

+0

warum schreibst du es nicht iterativ? – saadtaame

Antwort

5

Sie können die Stack-Größe auf Linux mit ulimit ändern, zum Beispiel:

ulimit -s unlimited 

unter Windows mit Visual Studio verwenden /Foption.

+1

@iharob: Die Frage ist getaggt gcc, wenn es Windows wäre, wäre es wahrscheinlich getaggt mingw. –

+3

'ulimit -s unlimited' macht die Stapelgröße nicht wirklich unbegrenzt. Es erlaubt nur die maximale Systemkonfigurationsgrenze zu verwenden. – wallyk

+0

@PeterHorvath also danke, mir zu erklären, was in meiner Antwort falsch ist. – ouah

2

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.

Verwandte Themen