|
Erstellt von Jesus Morales
vor mehr als 8 Jahre
|
|
En muchas ocasiones no es posible conocer de antemano la cantidad de variables necesarias para un programa.El manejo de memoria dinámica es la base del poder del lenguaje C y le da la capacidad de crear programas complejos que emplean grandes cantidades de memoria de manera eficiente.Todos los programas definen variables que pueden ser definidas como globales y locales. • Las variables globales y del programa principal (main) se almacenan en posiciones fijas de la memoria llamada memoria de datos. • Las variables locales se almacenan en el segmento de memoria llamada pila y existen solo cuando se hace una invocación a la función que las declaro. También se pueden declarar variables estáticas locales que también se almacenan en segmentos fijos de memoria o en la memoria de datos , sin embargo, también están disponibles en la función que las declaro.Todas estas variables comparten una característica en común, el compilador reserva espacio en memoria para almacenar los valores para estas variables.C ofrece al desarrollador la opción de crear diferentes tipos de variables de forma dinámica, para crear tales variables se utilizan funciones como: malloc(), realloc(), calloc(), y free().El espacio de memoria asignado a una variable generada de manera dinámica se crea durante la ejecución del programa (tiempo de ejecución), al contrario de las variables declaradas en código, que el espacio de memoria se les asigna en tiempo de compilación.Una variable que es generada dinámicamente, se construye (por ejemplo con malloc) y se puede destruir en tiempo de ejecución (uso de free). Todas las funciones de asignación dinámica de memoria se encuentran definidas en la biblioteca stdlib.h Función malloc() • malloc() es la forma más habitual de obtener bloques de memoria dinámica. La función genera o asigna un bloque de memoria que es el numero de bytes pasados como argumento. • malloc() devuelve un apuntador void* al bloque de memoria asignado, por lo tanto, hay que realizar un cast al tipo de apuntador requerido, para hacer buen uso de la memoria o de los datos que se lleguen a almacenar en dicho bloque de memoria. La función sizeof se utiliza con mucha frecuencia para referirnos al tamaño de memoria que se va a generar por las funciones de memoria dinámica.Cuando se termina de utilizar un bloque de memoria previamente asignado por cualquier función de asignación dinámica de memoria, se debe liberar el espacio de memoria y dejarlo disponible para otros procesos, esto se realiza utilizando la función free(). Función calloc() • calloc() es otra función que permite obtener memoria dinámica. Al igual que malloc() devuelve un apuntador void* que hace referencia al bloque de memoria generado o NULL si no existe memoria suficiente para generar el bloque solicitado, por tal motivo, también es necesario realizar un cast a un apuntador valido para manejar los datos que se van a almacenar en el bloque de memoria asignado. Función realloc() • realloc() es la tercera función para obtener memoria dinámica. También devuelve un apuntador void* que hace referencia al bloque de memoria por lo tanto necesario realizar un cast a un apuntador valido. • A diferencia de malloc() y calloc(), realloc() cambia el tamaño de un bloque de memoria asignado dinámicamente, es decir, toma como parámetro de entrada un apuntador *ptr a esa memoria y dependiendo de un segundo parámetro incrementará o reducirá el tamaño de dicho bloque de memoria.
Möchten Sie kostenlos Ihre eigenen Notizen mit GoConqr erstellen? Mehr erfahren.