Me gustaría saber cuál es la diferencia entre la asignación de memoria estática y la asignación de memoria dinámica.
¿Podría explicarlo con algún ejemplo?
Hay tres tipos de asignación: estática, automática y dinámica.
Asignación estática significa que la memoria para sus variables se asigna cuando el programa se inicia. El tamaño se fija cuando se crea el programa. Se aplica a las variables globales, a las variables de ámbito de archivo y a las variables calificadas con static
definidas dentro de las funciones.
La asignación automática de memoria se produce para las variables (no estáticas) definidas dentro de las funciones, y normalmente se almacena en la pila (aunque el estándar C no exige que se utilice una pila). No tienes que reservar memoria extra usándolas, pero por otro lado, también tienes un control limitado sobre el tiempo de vida de esta memoria. Por ejemplo: las variables automáticas en una función sólo están ahí hasta que la función termina.
void func() {
int i; /* `i` only exists during `func` */
}
La asignación de memoria dinámica es un poco diferente. Ahora controlas el tamaño exacto y el tiempo de vida de estas ubicaciones de memoria. Si no la liberas, te encontrarás con fugas de memoria, que pueden hacer que tu aplicación se cuelgue, ya que en algún momento, el sistema no puede asignar más memoria.
int* func() {
int* mem = malloc(1024);
return mem;
}
int* mem = func(); /* still accessible */
En el ejemplo superior, la memoria asignada sigue siendo válida y accesible, aunque la función haya terminado. Cuando hayas terminado con la memoria, tienes que liberarla:
free(mem);
Asignación de memoria estática:
**Asignación de memoria dinámica
Asignación de memoria estática. La memoria asignada estará en la pila.
int a[10];
Asignación de memoria dinámica. La memoria asignada estará en la pila.
int *a = malloc(sizeof(int) * 10);
y esta última debe ser liberadad ya que no hay Garbage Collector(GC) en C.
free(a);