yngwie21
11-11-2010, 13:52
Salve a tutti!
Ho realizzato un programmino in C che effettua una ricerca di soluzioni espandendo ricorsivamente un albero. Per far questo, ad ogni nuova espansione di un nodo creo altri nodi dinamicamente (malloc() ) fino a che la ricerca non termina con successo.
Quando la soluzione è a profondità accettabile non vi sono problemi visto che il programma termina correttamente restituendo la soluzione corretta, mentre quando la soluzione è ad una profondità eccessiva il programma non termina correttamente (crasha).
Ogni nodo occupa 88 byte... le ricerche più complesse arrivano a creare parecchie migliaia di istanze in memoria. Il crash si verifica a 21000 nuovi nodi allocati dinamicamente, sotto winsows, col dev C++ , mentre col gcc di linux arriva a 81000 istanze dopo di che termina col seguente messaggio "segmentation fault".
Pensavo fosse solo una questione di allocazione dinamica relativa a malloc() e quindi al limitato spazio della heap, ma mi sono accorto che non è cosi poichè ottengo gli stessi risultati se in un qualsiasi programma istanzio (non dinamicamente) un vettore delle dimensioni succitate. Ad esempio :
struct nodo N[21000]
dove la struct nodo è di dimensione 88 byte, genera errori. :muro:
Come posso risolvere questo problema?
E' possibile dare al programma maggior spazio?
Se SI questo implica delle impostazione del compilatore o del sis. op.?
Grazie in anticipo per le risposte!
Ho realizzato un programmino in C che effettua una ricerca di soluzioni espandendo ricorsivamente un albero. Per far questo, ad ogni nuova espansione di un nodo creo altri nodi dinamicamente (malloc() ) fino a che la ricerca non termina con successo.
Quando la soluzione è a profondità accettabile non vi sono problemi visto che il programma termina correttamente restituendo la soluzione corretta, mentre quando la soluzione è ad una profondità eccessiva il programma non termina correttamente (crasha).
Ogni nodo occupa 88 byte... le ricerche più complesse arrivano a creare parecchie migliaia di istanze in memoria. Il crash si verifica a 21000 nuovi nodi allocati dinamicamente, sotto winsows, col dev C++ , mentre col gcc di linux arriva a 81000 istanze dopo di che termina col seguente messaggio "segmentation fault".
Pensavo fosse solo una questione di allocazione dinamica relativa a malloc() e quindi al limitato spazio della heap, ma mi sono accorto che non è cosi poichè ottengo gli stessi risultati se in un qualsiasi programma istanzio (non dinamicamente) un vettore delle dimensioni succitate. Ad esempio :
struct nodo N[21000]
dove la struct nodo è di dimensione 88 byte, genera errori. :muro:
Come posso risolvere questo problema?
E' possibile dare al programma maggior spazio?
Se SI questo implica delle impostazione del compilatore o del sis. op.?
Grazie in anticipo per le risposte!