Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

malloc() vs calloc():diferencias clave explicadas con ejemplos

Antes de aprender la diferencia entre malloc y calloc, aprendamos:

¿Qué es la asignación de memoria dinámica?

La asignación de memoria dinámica es un proceso de asignación de memoria en tiempo de ejecución. Hay cuatro rutinas de biblioteca, calloc(), free(), realloc() y malloc() que se pueden usar para asignar memoria y liberarla durante la ejecución del programa. Estas rutinas se definen en el archivo de encabezado denominado stdlib.h.

¿Qué es malloc() ?

Es una función que se utiliza para asignar un bloque de memoria dinámicamente. Reserva espacio de memoria del tamaño especificado y devuelve el puntero nulo que apunta a la ubicación de la memoria.

El puntero devuelto suele ser de tipo void. Significa que podemos asignar la función malloc a cualquier puntero. La forma completa de malloc es asignación de memoria.

En este tutorial, aprenderá:

¿Qué es calloc() ?

La función Calloc() se utiliza para asignar varios bloques de memoria. Es una función de asignación de memoria dinámica que se utiliza para asignar la memoria a estructuras de datos complejas, como matrices y estructuras. Si esta función no puede asignar suficiente espacio como se especifica, devuelve un puntero nulo. La forma completa de la función calloc es asignación contigua.

¿Por qué usar malloc() ?

Estas son las razones para usar malloc()

¿Por qué usar calloc() ?

Estas son las razones para usar calloc()

Sintaxis de malloc()

Aquí hay una sintaxis de malloc()

ptr = (cast_type *) malloc (byte_size);

En la sintaxis anterior, ptr es un puntero de cast_type. La función malloc devuelve un puntero a la memoria asignada de byte_size.

Example: ptr = (int *) malloc (50)

Cuando esta instrucción se ejecuta con éxito, se reserva un espacio de memoria de 50 bytes. La dirección del primer byte del espacio reservado se asigna al puntero “ptr” de tipo int.

Sintaxis de calloc()

Aquí hay una sintaxis de malloc()

ptr = (cast_type *) calloc (n, size);

La sintaxis anterior se usa para asignar n bloques de memoria del mismo tamaño. Una vez asignado el espacio de memoria, todos los bytes se inicializan a cero. Se devuelve el puntero, que actualmente se encuentra en el primer byte del espacio de memoria asignado.

Ejemplo de malloc() en C

En el siguiente código, sizeof(*ptr) se usa para asignar un bloque de memoria de 15 enteros. En la instrucción printf, estamos encontrando el valor del sexto entero.

#include<stdlib.h>
#include<stdio.h>
int main(){
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); 
    if (ptr != NULL) {
      *(ptr + 5) = 480; 
      printf("Value of the 6th integer is %d",*(ptr + 5));
    }
}

Salida:

El valor del sexto entero es 480

Ejemplo de calloc() en C

El siguiente programa en lenguaje C calcula la suma de los primeros diez términos. Si el valor del puntero es nulo, no se asignará el espacio de memoria.

For loop se usa para iterar el valor de una variable "i" e imprimir la suma. Por último, función libre se utiliza para liberar el puntero.

#include <stdio.h>
#include <stdlib.h>
    int main() {
        int i, * ptr, sum = 0;
        ptr = calloc(10, sizeof(int));
        if (ptr == NULL) {
            printf("Error! memory not allocated.");
            exit(0);
        }
        printf("Building and calculating the sequence sum of the first 10 terms \n");
        for (i = 0; i < 10; ++i) { * (ptr + i) = i;
            sum += * (ptr + i);
        }
        printf("Sum = %d", sum);
        free(ptr);
        return 0;
    }

Salida:

Construcción y cálculo de la secuencia suma de los primeros 10 términos n Sum =45

Diferencia entre calloc() y malloc()

Aquí hay una diferencia importante entre malloc() y calloc():

malloc() calloc() La función Malloc() creará un solo bloque de memoria del tamaño especificado por el usuario. La función Calloc() puede asignar múltiples bloques de memoria para una variable. La función Malloc contiene valor basura. El bloque de memoria asignado por una función calloc siempre se inicializa en cero. El número de argumentos es 1. El número de argumentos es 2. Calloc es más lento que malloc. Malloc es más rápido que calloc. No es seguro en comparación con calloc. Es seguro de usar en comparación con malloc. La eficiencia del tiempo es mayor que calloc (). La eficiencia del tiempo es menor que malloc(). La función Malloc() devuelve solo la dirección de inicio y no la convierte en cero. Antes de asignar la dirección, la función Calloc() devuelve la dirección de inicio y la convierte en cero. No realiza la inicialización de la memoria. Realiza la inicialización de la memoria.

DIFERENCIAS CLAVE:


Lenguaje C

  1. Expresiones, declaraciones y bloques de C# (con ejemplos)
  2. C++ do...while bucle con ejemplos
  3. Punteros de C++ con ejemplos
  4. Tipo de datos Char de C++ con ejemplos
  5. Sobrecarga de operadores de C++ con ejemplos
  6. Funciones de C++ con ejemplos de programas
  7. Tutorial de colecciones de C# con ejemplos
  8. Diferencia entre while y do-while:explicada con ejemplos
  9. Función calloc() en la biblioteca C con programa EJEMPLO
  10. Python String count () con EJEMPLOS
  11. Función Python round() con EJEMPLOS