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
risposta
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).
Oppure salta intorno alla memoria se si utilizza uno stack non lineare. –
OK, beh, almeno l'OP saprebbe che tipo di stack avevano. – john
buona risposta ma penso che '& dummy' scendano mentre le dimensioni dello stack aumentano ... –
#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).
- 1. Dimensione cartella ricorsiva iOS
- 2. Debugging "Dimensione massima stack di chiamate superato"
- 3. qual è la dimensione dello stack in VC++?
- 4. Overflow dello stack causato dalla funzione ricorsiva
- 5. Come trovo la dimensione massima dello stack?
- 6. Dimensione massima stack per programma C/C +?
- 7. Ricorsione JavaScript: Dimensione massima stack di chiamate superata
- 8. Ottieni la dimensione dello stack corrente in FORTH
- 9. Dimensione massima stack di chiamate superata durante un setTimeout Chiama
- 10. JSpec - RangeError: Dimensione massima dello stack di chiamate superata
- 11. Come convertire una funzione ricorsiva per utilizzare uno stack?
- 12. Funzione ricorsiva che causa un overflow dello stack
- 13. Esiste un "profiler della dimensione della funzione"?
- 14. Dimensione della barra dei pulsanti funzione
- 15. salvare una funzione nella dimensione locale
- 16. Come impostare la dimensione dello stack in TThread?
- 17. Dimensione massima stack di chiamate superata durante JSON.stringify (navigator)
- 18. La dimensione dello stack di iPhone è fissa?
- 19. Uncaught RangeError: Dimensione massima stack di chiamate superato, JavaScript
- 20. getter setter dimensione massima dello stack delle chiamate superata Errore
- 21. Nowjs: [RangeError: Dimensione massima stack di chiamate superato]
- 22. Come misurare la dimensione dello stack di un processo?
- 23. Mongoose - RangeError: Dimensione massima stack di chiamate superata
- 24. Meteor: dimensione massima dello stack di chiamate superata
- 25. Dimensione massima dello stack, ulimit -s, segfault 11 - come funziona?
- 26. Stack overflow dalla chiamata ricorsiva in Lisp
- 27. Div Dimensione Dimensione del contenuto automatica
- 28. Dimensione ingresso non valida Dimensione compressa
- 29. Dimensione barra delle azioni dimensione azione
- 30. Funzione anonima ricorsiva Matlab
Quante volte si ripete questa funzione? –
@delnan Se il numero esatto di byte: quindi questo è 42. –
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. –