Leyendo un libro para aclarar conceptos tomados en este curso, creí importante resaltar el uso de la memoria dinámica y como es el manejo de esta en C, pero ¿por que es tan importante el uso de memoria dinámica ?
resulta que en el caso del desarrollo no es muy común encontrarnos con datos estrictamente definidos, es decir, si lo existieran no hubiera nacido lo que hoy conocemos como big data, ya que no tendríamos que analizar datos y probablemente como manejarlos.
la memoria dinámica nos hace la vida mucho mas sencilla y se acerca a lo que es la realidad, los datos de una aplicación no pueden ser limitados, imagina tener una aplicación para registrar los estudiantes de un curso para aprender a tejer, al inicio son 20 y tu defines esos 20 en una variable int estudiantes[20], ¿pero que pasa si quieres ingresar mas?, seguro se te va a desbordar el programa o vas a tener los tan famosos bugs ¿que hacer entonces? , una solución posible es aumentar el tamaño del array tal vez 10 elementos mas, pero, tendrías que hacer eso todo el tiempo y haría que el mantenimiento del software sea mas de lo esperado, así que podemos hacer lo siguiente:
la memoria dinámica se comporta un tanto diferentes a las variables locales las cuales se asignan durante la compilación del programa, pero si asignamos una variable de manera dinámica, esta se crea durante la ejecución del programa y esta se asigna en un espacio de memoria que se conoce como almacén libre, aquí en este punto nos preguntamos: ¿como se usaría en C la memoria dinámica?
la forma de usar esta funcion es la siguiente
<puntero =(tipo*) malloc(tamaño en bytes);
//Ejemplo
long *p
p=(long*)malloc(32);
>
o tambien se puede usar el operador unario que probablemente ya conoces llamado sizeof este se aplica a un tipo de dato (o una variable) y el valor resultante es el numero de bytes que ocupa cierto tipo de dato
<
int x;
intmain(){
x=sizeof(int);
printf("Las variables int ocupan %d bytes \n\n", x);
return0
}
>
en algunos casos la funcion malloc devuelve cero o NULL debido a que tal vez no pudo asignar memoria porque no hay memoria disponible y no puede terminar la peticion de asignacion
ejemplo:
<
//Reserva de n caracteres
int n;
char *s;
scanf("%d", &n);
s=(char*)malloc(n*sizeof(char));
>
tambien es importante tener en cuenta si hay el suficiente espacio de memoria para que podamos manejar los datos, esto se puede hacer de la siguiente manera:
<
#include <stdio.h>int main(){
void *p;
long m=0;for (int i=1; ;i++){
p=malloc(1000);if(p==NULL) break;
m+=1000;
printf("\n Total de memoria asignada %d \n", m);return0;
}
}
>
existen otros casos en donde no conocemos el tamaño real de datos que se van a ingresar y para esto debemos calcular la memoria en tiempo de ejecucion es decir cuando el usuario esta usando el programa
ejemplo:
<
#include <stdlib.h>#include <stdio.h>int main(){
double *ad;int n;
printf("Ingrese el numero de elementos del array: \n");
scanf("%d", &n);
ad =(double*)malloc(n*sizeof(double));
ad=sizeof(double);
printf("el espacio de memoria reservado fue %d", ad);
}
>
Gracias por la información, me resulto útil.
¿Qué libro fue el que consultaste?