2013-03-23 13 views
6

Per un programma C++ che utilizza una funzione ricorsiva, come è possibile valutare la dimensione dello stack dinamico occupata da questa funzione?Dimensione dimensione stack attivata tramite funzione ricorsiva

+0

Quante volte si ripete questa funzione? –

+0

@delnan Se il numero esatto di byte: quindi questo è 42. –

+0

Completamente dipendente da Hardware/OS/Compilatore/Livello di ottimizzazione. Così quasi impossibile da rispondere. E senza significato. Perché ti interessi. Se c'è anche un potenziale di far saltare il tuo stack, dovresti usare una soluzione iterativa. –

risposta

7
void recursive_function() 
{ 
    int dummy; 
    cout << "stack = " << &dummy << '\n'; 
    ... 
} 

Guarda il valore della &dummy aumento, come l'utilizzo di stack va (o cadere se il vostro stack cresce verso il basso).

+1

Oppure salta intorno alla memoria se si utilizza uno stack non lineare. –

+0

OK, beh, almeno l'OP saprebbe che tipo di stack avevano. – john

+0

buona risposta ma penso che '& dummy' scendano mentre le dimensioni dello stack aumentano ... –

2
#include <stdio.h> 
#include <stdlib.h> 

ssize_t recurse(int limit, char* stack = NULL) 
{ 
    char dummy; 

    if (stack == NULL) 
     stack = &dummy; 

    if (limit > 0) 
     return recurse(limit - 1, stack); 
    else 
     return stack - &dummy; 
} 

int main(int argc, char* argv[]) 
{ 
    int limit = atoi(argv[1]); 
    printf("depth %d took %zd bytes\n", limit, recurse(limit)); 
    return EXIT_SUCCESS; 
} 

Se corro questo con 4 ottengo:

depth 4 took 192 bytes 

Come altri hanno suggerito nei commenti, questo non è completamente portatile, ma dovrebbe funzionare su una gamma piuttosto vasta di sistemi attuali. Nota che il tipo di risultato è firmato nel caso in cui qualcosa di "strano" accada - puoi sicuramente controllarlo per il buonsenso (diciamo, assicurati che sia tra 5 e 500, a seconda di cos'altro contiene la tua funzione).

Problemi correlati