Tómelo de un programador de C ... se trata de costo/beneficio y el uso apropiado
Los algoritmos de recolección de basura, tales como tricolor/marcar y barrido existe latencia entre una frecuencia significativa el recurso se 'pierde' y se libera el recurso físico. En algunos momentos, el GC pausará la ejecución del programa para realizar la recolección de basura.
Siendo un programador C mucho tiempo, te puedo decir:
a) Manual) la recolección de basura libre (es difícil - Esto se debe a que por lo general hay una mayor tasa de error en la colocación humana del libre () llamadas que algoritmos GC.
b) Manual() la recolección de basura cuesta tiempo - ¿El tiempo dedicado a la eliminación de errores supera las pausas de un milisegundo de un GC? Puede ser beneficioso utilizar la recolección de basura si está escribiendo un juego que decir un kernel incrustado.
Pero, cuando no puede permitirse la desventaja en tiempo de ejecución (recursos correctos, restricciones en tiempo real), entonces realizar una asignación de recursos manual es probablemente mejor. Puede llevar tiempo, pero puede ser 100% eficiente.
¿Intenta imaginar un kernel de sistema operativo escrito en Java? o en el tiempo de ejecución de .NET con GC ... Solo observe cuánta memoria acumula la JVM cuando ejecuta programas simples. Soy consciente de que los proyectos existen así ... me hacen sentir un poco enfermo.
Solo tenga en cuenta que mi linux box hace las mismas cosas hoy en día con 3GB de RAM que cuando tenía 512MB de RAM hace años. La única diferencia es que tengo mono/jvm/firefox, etc. ejecutándose. El caso comercial para GC es claro, pero todavía me hace sentir incómodo muchas veces.
Los buenos libros:
Dragon book (recent edition), Modern Compiler Implementation in C
http://stackoverflow.com/questions/1424660/garbage-collection-vs-non-garbage-collection-programming-languages –
@tusbar Aunque esa pregunta tiene un título genérico, solo pregunta sobre los errores que los desarrolladores cometerían si están programando en lenguajes sin GC. – rpattabi