2010-08-24 18 views
7

Ich schreibe einen rekursiven Flood-Fill-Algorithmus, um verbundene Komponenten in einem Bild zu finden, mein Code kompiliert und läuft gut mit MSVC 2008 Compiler; aber die mingw-kompilierte Binärdatei stürzte zur Laufzeit ab.Stapelgröße beim Kompilieren mit Mingw erhöhen?

Nachdem ich den Algorithmus mit std :: stack zu nicht-rekursiv konvertiert habe, läuft alles gut.

Aber was, wenn ich rekursive Algorithmen in einigen Fällen verwenden muss, und mingw kann nicht damit umgehen?

Wie kann ich die Stackgröße einer Binärdatei erhöhen, gibt es irgendwelche Kompilierungsoptionen?

Dank

+0

auch: ein * * Scanline-Flutfüllung verwenden. Es erfordert normalerweise nicht so viel Stapelspeicherplatz. Außerdem: Verwenden Sie Ihren eigenen Stack und machen Sie Ihre Funktion iterativ. – sellibitze

Antwort

12

Verwenden

gcc -Wl,--stack,N 

wobei N Größe stapeln ist. Z.B. gcc -Wl,--stack,4194304

0

wahrscheinlich die beste Wette ist pthreads zu verwenden, um einen neuen Thread zu starten und Ihren Algorithmus in dem neuen Thread ausgeführt werden. Einer der Parameter zu pthread_create ist pthread_attr_t. Mit diesem Attribut können Sie die Stackgröße angeben (durch Aufruf von pthread_attr_setstacksize).

Edit: Ob das funktioniert oder nicht, ist abhängig von Unterstützung der zugrunde liegenden Kompatibilitätsschicht

0

Vielleicht ist eine Erhöhung der Stackgröße nicht die gewünschte Lösung. Diese Einschränkungen bestehen aus einem bestimmten Grund. Es kann auch vorkommen, dass Ihr Algorithmus in naher Zukunft noch mehr Speicherplatz benötigt und Sie ihn erneut erhöhen müssen.

Vielleicht sollten Sie Ihren Algorithmus in einen nicht-rekursiven konvertieren. Dies kann für jeden Algorithmus durchgeführt werden. See this discussion

Und Sie werden wahrscheinlich eine Leistungsverbesserung gewinnen auch