J'écris un algorithme de remplissage d'inondation récursif pour trouver des composants connectés dans une image, mon code compile et fonctionne bien avec le compilateur MSVC 2008; Mais le binaire compilé Mingw s'est écrasé au moment de l'exécution. P>
Après avoir converti l'algorithme en non récursif avec STD :: Stack, tout va bien. P>
Mais si je dois utiliser un algorithme récursif dans certains cas, et MINGW ne peut pas le gérer? P>
Comment puis-je augmenter la taille de la pile d'un binaire, existe-t-il des options de compilation? P>
merci p>
3 Réponses :
Probablement le meilleur pari est d'utiliser edit: strong> si cela fonctionne ou non dépend de la prise en charge de la couche de compatibilité sous-jacente p> pthreads code> pour lancer un nouveau thread et exécuter votre algorithme dans le nouveau fil. L'un des paramètres à
pthread_create code> est
pthread_attr_t code>. Utilisation de cet attribut, vous pouvez spécifier la taille de la pile (en appelant
pthread_attr_setstacksize code>). P>
Utilisez où n est la taille de la pile. Par exemple. GCC -WL, - Pile, 4194304 Code> P> P>
Peut augmenter la taille de la pile n'est pas la solution que vous voulez. Ces restrictions existent pour une raison. Il peut également arriver que dans un avenir proche, votre algorithme utilisera encore plus d'espace de pile et vous devrez l'augmenter à nouveau. P>
Peut-être que vous devriez envisager de convertir votre algorithme en une non récursive. Cela peut être fait pour chaque algorithme. Voir cette discussion P>
Et vous gagnerez probablement une amélioration de la performance également p>
Aussi: utilisez un Scanline i> Remplissage des inondations. Cela n'exige généralement pas que beaucoup d'espace de pile. Aussi: utilisez votre propre pile et faites votre fonction itérative.