Saltar al contenido

¿Cuándo y por qué usar malloc?

Esta es la respuesta más completa que encomtrarás compartir, pero primero obsérvala detenidamente y analiza si se adapta a tu proyecto.

Solución:

malloc se utiliza para la asignación de memoria dinámica. Como se dijo, es una asignación dinámica, lo que significa que asigna la memoria en tiempo de ejecución. Por ejemplo, cuando no sabe la cantidad de memoria durante el tiempo de compilación.

Un ejemplo debería aclarar esto. Digamos que sabe que habrá un máximo de 20 estudiantes. Así que puedes crear un array con static 20 elementos. Su array podrá albergar un máximo de 20 alumnos. Pero, ¿y si no sabes el número de estudiantes? Digamos que la primera entrada es el número de estudiantes. Podría ser 10, 20, 50 o lo que sea. Ahora tomará la entrada n = el número de estudiantes en tiempo de ejecución y asignará esa cantidad de memoria dinámicamente usando malloc.

Esto es sólo un ejemplo. Hay muchas situaciones como esta en las que se necesita una asignación dinámica.

Echa un vistazo a la página del manual malloc(3).

Tu usas malloc cuando necesita asignar objetos que deben existir más allá del tiempo de ejecución del bloque actual (donde una copia al devolver también sería costosa), o si necesita asignar una memoria mayor que el tamaño de esa pila (es decir: una pila local de 3 mb array es un malo ocurrencia).

Antes de que C99 introdujera los VLA, también necesario para realizar la asignación de un tamaño dinámico array, sin embargo, es necesario para la creación de estructuras de datos dinámicas como árboles, listas y colas, que son utilizados por muchos sistemas. Probablemente hay muchas más razones, estas son solo algunas.

Ampliando un poco la estructura del ejemplo, considere esto:

#include 

int main(int argc, const char *argv[]) 

typedef struct 
 char* name;
 char* sex;
 char* insurace;
 int age;
 int yearInSchool;
 float tuitionDue;
student;


//Now I can do two things
student p;

//or
student *p = malloc(sizeof *p);


C a es un lenguaje que pasa implícitamente por valor, en lugar de por referencia. En este ejemplo, si pasáramos ‘p’ a una función para trabajar en ella, estaríamos creando una copia de toda la estructura. Esto usa memoria adicional (el total de cuánto espacio requeriría esa estructura en particular), es más lento y potencialmente no escala bien (más sobre esto en un minuto). Sin embargo, al pasar *p, no pasamos toda la estructura. Solo estamos pasando una dirección en la memoria que se refiere a esta estructura. La cantidad de datos pasados ​​es menor (tamaño de un puntero), por lo que la operación es más rápida.

Ahora, sabiendo esto, imagine un programa (como un sistema de información de estudiantes) que tendrá que crear y administrar un conjunto de registros de miles, o incluso decenas de miles. Si pasa toda la estructura por valor, llevará más tiempo operar en un conjunto de datos que pasar un puntero a cada registro.

Recuerda dar visibilidad a este enunciado si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *