2010-08-24 22 views
7

Escribo un algoritmo recursivo de inundación para encontrar los componentes conectados en una imagen, mi código se compila y funciona bien con el compilador MSVC 2008; pero el binario compilado de mingw se colgó en el tiempo de ejecución.¿Aumenta el tamaño de la pila al compilar con mingw?

Después de convertir el algoritmo en no recursivo con std :: stack, todo va bien.

Pero, ¿qué ocurre si debo usar un algoritmo recursivo en algún caso, y mingw no puede manejarlo?

¿Cómo puedo aumentar el tamaño de la pila de un archivo binario, hay alguna opción de compilación?

Gracias

+0

también: Utilice una línea de escaneo * * relleno de inundación. Por lo general, no requiere mucho espacio en la pila. Además: usa tu propia pila y haz que tu función sea iterativa. – sellibitze

Respuesta

12

Uso

gcc -Wl,--stack,N 

donde N es el tamaño de la pila. P.ej. gcc -Wl,--stack,4194304

0

probablemente la mejor opción es utilizar pthreads para iniciar un nuevo hilo y ejecutar el algoritmo en el nuevo hilo. Uno de los parámetros a pthread_create es pthread_attr_t. Usando este atributo puede especificar el tamaño de la pila (llamando al pthread_attr_setstacksize).

Editar: Si esto funciona o no dependiente está en apoyo de la capa de compatibilidad subyacente

0

Tal vez aumentar el tamaño de la pila no es la solución que desea. Estas restricciones existen por una razón. También puede suceder que en un futuro cercano tu algoritmo use aún más espacio en la pila y tendrás que aumentarlo nuevamente.

Quizás deba considerar convertir su algoritmo en uno no recursivo. Esto se puede hacer para cada algoritmo. See this discussion

Y es probable que obtener una mejora en el rendimiento también

Cuestiones relacionadas