2015-01-23 14 views
5

Sto scrivendo un programma C e sto superando il limite di ricorsione tramite un errore di segmentazione. C'è un modo per aumentare il limite di ricorsione del programma (magari aumentando le dimensioni dello stack), tramite un'opzione per GCC o tramite un'opzione della riga di comando? Il programma è in esecuzione su Ubunutu.C'è un modo per aumentare le dimensioni dello stack/limite di ricorsione?

+0

Significa che si sta traboccando lo stack e quindi si sta verificando un errore di segmentazione? –

+0

@iharob: Sì, l'ho verificato con 'gdb'. – Claudiu

+0

perché non lo scrivi iterativamente? – saadtaame

risposta

5

È possibile modificare la dimensione dello stack con ulimit su Linux, per esempio:

ulimit -s unlimited 

su Windows con Visual Studio, utilizzare /Foption.

+1

@iharob: la domanda è codificata in gcc, se fosse Windows probabilmente verrebbe etichettata come mingw. –

+3

'ulimit -s unlimited' non rende le dimensioni dello stack illimitate. Permette solo di utilizzare il limite massimo configurato per il sistema. – wallyk

+0

@PeterHorvath quindi grazie per spiegarmi cosa c'è di sbagliato nella mia risposta. – ouah

2

La dimensione dello stack è una funzione del sistema operativo, anche se molti sistemi operativi precedenti (ad esempio MSDOS) non eseguivano il controllo del segmento dello stack del programma: era compito del programma riservare un segmento di dimensioni adeguate.

Con memoria virtuale e API a 32 bit, la dimensione dello stack viene solitamente fornita da un meccanismo di gestione delle risorse. Ad esempio, su Linux, il comando ulimit fornisce un'origine di controllo della dimensione dello stack. Altri livelli di controllo sono forniti da meccanismi all'interno del kernel che impongono criteri di sistema, limiti di memoria e altri limiti.

Problemi correlati