Non sono riuscito a trovare le informazioni su dove sono create le istanze delle classi di eccezioni durante la gestione delle eccezioni? In quale area di memoria (stack, heap, memoria statica, ecc.)? Presumo che non sia in pila a causa dello stack-unwinding ...In quale area di memoria sono create istanze di classi di eccezioni?
risposta
dalla norma:
15.2.4: La memoria per la copia temporanea del all'eccezione generata è allocato in modo non specificato, eccetto come indicato in 3.7.3.1.
E 3.7.3.1 dice:
3.7.3.1: Tutti gli oggetti che non hanno dinamica durata di conservazione né sono locali hanno durata di conservazione statica. La memoria per questi oggetti deve durare per la durata del programma (3.6.2, 3.6.3).
La risposta è "in un'area misteriosa gestita dal compilatore" - seriamente, lo standard non specifica dove devono essere memorizzati.
eccezioni sono sempre gettati per valore quindi nessun problema anche se allocato sulla pila
La cucina è quotata dallo standard, non è specificata. La maggior parte delle implementazioni li assegna dall'heap, poiché devono sopravvivere al processo di unwinding dello stack, che può rimuovere i frame dello stack (quando si lancia all'esterno di una funzione) o crearne di nuovi (chiamando i distruttori, ecc.). GCC utilizza la funzione integrata __cxa_allocate_exception
per allocare la memoria.
- 1. Classi di eccezioni Java
- 2. AngularJs 2: più istanze di servizio create
- 3. Quali sono le classi di memoria in D?
- 4. Quando sono state create istanze di membri speciali di una classe template?
- 5. Estensione di classi e istanze
- 6. Quali classi di eccezioni sono nella libreria standard C++
- 7. Vengono create istanze multiple di sottoclassi incompatibili di InteractiveShellEmbed
- 8. recupero classi più specifiche di istanze
- 9. Le istanze di Django Model sono lavabili?
- 10. stringhe letterali e area di memoria di generazione permanente
- 11. C++ quale libreria di compressione in memoria?
- 12. punti di perdite di memoria Android non sono chiari!
- 13. Create non sovrapposti trama area in pila con ggplot2
- 14. Caricatore di classi di memoria crittografate Java
- 15. Intersezione di area in Python
- 16. PHP Eccezioni nelle classi
- 17. Come determinare quale gestore di eccezioni rescue_from sceglierà in Rails?
- 18. Conversione di NSArray in NSSet, trasferimento di istanze di classi personalizzate in modo incoerente
- 19. quale caricatore di classi viene utilizzato?
- 20. Perché le istanze di Metaclass sono Metaclass e non Class?
- 21. Quali sono le eccezioni standard di Scala?
- 22. Qual è la differenza tra classi e istanze di oggetti?
- 23. Activator.CreateInstance - Come creare istanze di classi che hanno costruttori parametrizzati
- 24. Predefinito utile __repr__ per istanze di classi nidificate
- 25. Come passare istanze di classi personalizzate tramite Web-Workers?
- 26. Elegante l'inizializzazione di un array di istanze di classi in C#
- 27. Test di due istanze di oggetto sono uguali JUnit
- 28. classi statiche e più istanze in azzurro
- 29. Quale profilo di memoria PyPy è raccomandato?
- 30. Sono possibili prove di istanze familiari di tipo?