Estoy aprendiendo D desde 8 años en C++. Mi pregunta es respecto a la recolección de basura D, ¿cuándo uso eliminar y cuándo no?Cuándo eliminar en D?
Respuesta
No es así. Eliminar no se debe usar con la versión D 2 y se debe eliminar del idioma. Lo que es la espera, no estoy seguro. En su lugar, utiliza una función, destroy (objeto), que llama al destructor donde puede liberar recursos que no son memoria del GC. El destructor se causará nuevamente durante la recolección GC de la memoria propia del objeto. Esto se explica en "The D Programming Language".
La idea es recuperar los recursos antes de lo que el GC proporcionaría y evita que la corrupción de memoria cuelgue los punteros. Para ser menos seguro, el módulo core.memory proporciona GC.free (object) que se puede usar para liberar la memoria, después de llamar a destroy (object).
Como no soy un programador de C++, realmente no conozco el patrón RAII, pero este y el recuento de referencias es la estrategia esperada si desea evitar el GC.
Sí. 'clear()' se usa para llamar al destructor de un objeto y ponerlo en un estado no válido, pero sigue siendo tarea del GC reclamar la memoria. 'delete' se va completamente. Si quiere administrar la memoria por completo, usa 'malloc' y' free'. Sin embargo, usar 'clear()', 'malloc' y' free' en el código D realmente no debería ser la norma. Están ahí para esos casos especiales donde los necesita. –
Gracias Jonathan, no quise dar a entender que sería común usar dicho patrón. Solo que esta es la facilidad para hacerlo. Lo que hace que Corbin March sea una mejor respuesta ya que la pregunta realmente no era sobre la eliminación en sí misma. –
Eche un vistazo a Garbage Collection en la documentación D. Como se señaló, es (casi) innecesario administrar explícitamente la memoria. Por supuesto, después de pasar un puñado de puntos tratando de convencerlo del poder del GC, estos incluyen algunos escenarios en los que la recolección de basura se queda corta. Para abordar estas caídas cortas (las llaman restricciones), Digital Mars ofrece consejos para Memory Management.
Si es posible, deje que el recolector de basura D haga su trabajo. Ignorar la administración de memoria explícita. En algunos escenarios muy específicos, existe la posibilidad de una inaceptable pausa o memoria inactiva del GC que no se puede reclamar. Si su aplicación incluye uno de estos escenarios (prueba y perfil para probarlo), aísle la causa del problema y administre explícitamente la memoria cuando sea necesario. D te permite comenzar como un optimista. Si las cosas no funcionan a la perfección, es reconfortante que pueda recurrir a la administración de memoria explícita.
Gracias - He revisado la documentación de la recolección de basura, pero no me pareció lo suficientemente claro como para hacer una suposición. – bfops
- 1. Cuándo eliminar ramas en Git?
- 2. Cuándo usar "eliminar"?
- 3. Eliminar, ¿cuándo se llama?
- 4. Flex/AS3: ¿Cuándo eliminar oyentes?
- 5. Diferencia entre: d [count] y d [count]
- 6. ¿Qué es "-d" en "npm -d install"?
- 7. En java -D ¿qué significa la D?
- 8. eliminar cero líneas 2-D de matriz numpy
- 9. Cuándo eliminar una rama de Git?
- 10. QueryPerformanceCounter en D?
- 11. salida equivalente en D?
- 12. Plantilla en programación D
- 13. Y-combinator en D?
- 14. Programación CGI en D
- 15. ¿Cuándo puedo eliminar un archivo después de usarlo en Response.WriteFile()?
- 16. ¿Qué significa M, D en decimal (M, D) exactamente?
- 17. Cómo vincular bibliotecas D en un programa D
- 18. diferencias entre "d = dict()" y "d = {}"
- 19. Vectores y matrices dinámicas en D
- 20. D Arrays dinámicos - RAII
- 21. Liberar recursos en el lenguaje D
- 22. Comparación de tiempo en D
- 23. ¿Qué significa .d en JSON?
- 24. Cómo implementar rangos en D
- 25. Importación de módulos en D
- 26. enumeración vs inmutable en D
- 27. ¿Alternativa para atrapar en D?
- 28. ambiguo Struct constructores en D
- 29. Usando `void main` en D
- 30. Tuple vs TypeTuple en D
¿La recolección de basura no significa que no es necesario 'borrar' en absoluto? – delnan