domingo, 1 de julio de 2007

Operadores New y Delete

Los programas pequeños no suelen ocupar demasiado espacio en memoria, por lo que no es común preocuparse por esta y se declaran al inicio del programa todas las variables que se usaran en su ejecución. Pero cuando se trabaja con una aplicación demasiado grande y pesada esto se vuelve ineficiente porque se cargan en memoria muchos datos que no se utilizaran a menos que sea en tareas específicas.

El gasto de memoria en la ejecución de un programa puede ser controlado de muchas maneras, y una de las herramientas más útiles para un programador son los operadores new y delete. Aunque pueden ser muy confusos porque su uso se combina con punteros es posible utilizarlos de la manera adecuada si se comprende su funcionamiento y se trabaja ordenadamente. El uso de new y delete es realemente importante al trabajar con Tipos Abstractos de Datos (TAD) y permite un mejor manejo de objetos además de la creación de arreglos de diferentes tamaños en tiempo de ejecución.

Al crear variables dinámicamente la única forma de referenciarlas es por medio de su puntero, ya que no poseen un nombre de variable, y no se destruyen automáticamente al finalizar el programa. En C++ hay que borrar estos datos por medio del operador delete al finalizar su uso, aunque existen otros lenguajes que se encargan automáticamente por medio de un sistema de "recolección de basura". En un programa corto es sencillo controlar los objetos que se desecharan, pero en programas largos que implementan TAD's es fácil perder el rastro de un objeto debido a que los punteros cambian de objetivo constantemente. Para evitar estas fugas de memoria es importante organizar adecuadamente el programa y asegurarse que cada parte de su funcionamiento este debidamente aislada y documentada.

La separación adecuada de los distintos procesos de una aplicación es una práctica muy recomendable para una utilización más óptima de la memoria. Es mucho mejor utilizar las variables en el entorno de función en lugar de las variables globales, incluso es recomendable que las variables declaradas en main sean solamente las necesarias para la ejecución básica del programa, y que las funciones específicas manejen sus propias variables. Esto también da mayor robustez al código y evita que los datos se sobreescriban inesperadamente
provocando pérdida de información.

No hay comentarios: