heh!1:(0x008):06/01/2000 << Back To heh!1


Programacion en C: Manejo dinamico de Memoria ^^^^^^^^^^^^ ^^ ^ ^^^^^^ ^^^^^^^^ ^^ ^^^^^^^ Escrito por [Hellraiser] (05/01/2000) ---------------------------------------- - *NOTA: Este articulo esta hecho para - - aquel que tiene nocion del lenguaje - - C, ya que seria medio engorroso - - explicar todas las funciones de C. - ---------------------------------------- *Concepto de Manejo de Memoria: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Cuando nosotros queremos que nuestro programa escrito en el lenguaje C guarde informacion tanto en una variable global como en una constante a su vez estas funciones guardan su contenido en una seccion de la memoria de la computadora. Si nosotros luego de compilar nuestro codigo fuente en C ejecutamos el binario que nos dio el compilador la memoria que use nuestro programa se asignara en tiempo de ejecucion, o sea, cuando ejecutamos nuestro binario este se autoasigna la memoria a usar. Esto, a veces, muy pocas veces, puede hacer que nuestro programa genere un Stack Oveflow, o sea que la pila de memoria de nuestra maquina "desborde" su contenido. Para evitar esto, y para que nuestro programa sea mas eficiente, nos conviene asignarle el trozo de memoria que va a usar cada variable o constante de nuestro programa haciendo uso del Manejo Dinamico de Memoria. Las dos funciones basicas, infaltables y principales son las llamadas malloc y free. Malloc quiere decir Memory Allocation, o localizacion de Memoria, y la segunda (FREE) significa Free, por supuesto. *Funciones Principales: ^^^^^^^^^^^^^^^^^^^^^ Las funciones principales, como antes dije, son malloc y free. La funcion malloc nos sirve para asignarle el "trozo" de memoria a usar por la variable o constante de nuestro programa, y la funcion free, por ende, sirve para liberar ese "trozo" de memoria usada por la variable o constante. La declaracion de estas funciones son: *Para malloc- void *malloc(size_t size); *Para free- void free(void *ptr); No es necesario que sepamos el tama~o de de cada tipo de dato como float, double, aunque sabemos que char es de un byte. Para ese tipo de datos como float o double, usamos la funcion sizeof, que automaticamente durante la ejecucion del programa determina el tama~o de los datos guardados en esa variable/constante. *Ejemplo Practico: ^^^^^^^^^^^^^^^^ Un ejemplo simple del Manejo de Memoria Dinamica es el siguiente: <------------------------------[EMPIEZA CODIGO]------------------------------> <++> ejemplo1.c #include <stdio.h> #include <stdlib.h> void main(void) { char *nombre; int *telefono; nombre=(char *)malloc(sizeof(char)); telefono=(int *)malloc(sizeof(int)); printf("\nIngresa tu Nombre:"); scanf("%s", nombre); printf("\nIngresa tu Telefono: "); scanf("%d", telefono); printf("\n\nTu nombre es %s y tu numero de telefono es %d.\n"", nombre, telefono); free(nombre); free(telefono); } <--> <----------------------------[TERMINA CODIGO]---------------------------------> Lo que hicimos aca fue incluir la libreria standard (stdlib.h), la libreria standard de entrada y salida (stdio.h); declarar a main como void, declarar a nombre como una variable del tipo char (character), a telefono como una variable del tipo int (integer), asignarle un trozo de memoria (del tama~o de los datos que luego ingresemos) a la variable-char nombre, asignarle otro trozo de memoria a la variable-int telefono (del tama~o de los datos que posteriormente ingresemos), imprimir en pantalla una linea para que el usuario ingrese su nombre, guardamos lo que el usuario escribio dentro de la variable-char nombre, imprimimos en pantalla una linea para que el usuario ingrese su numero telefonico, luego guardamos los datos que el usuario ingreso en la variable-int telefono; luego imprimimos en pantalla una linea que muestra las variables que capturamos, y como final liberamos el trozo de memoria que las variables nombre y telefono estaban utilizando. *Conclusion: ^^^^^^^^^^ Una funcion muy util dentro del gran lenguaje C, no muy dificil de aprender pero muy util para nuestros proyectos. *Nota del Autor: ^^^^^^^^^^^^^^ Espero que hayan entendido, que la hayan pasado bien leyendolo como yo lo hice escribiendolo. Saludos, [Hellraiser] E-Mail <askhell@ciudad.com.ar> -EOF-