Diferencia entre new y malloc ()

Autor: Laura McKinney
Fecha De Creación: 1 Abril 2021
Fecha De Actualización: 5 Mayo 2024
Anonim
new vs. malloc (C++ for Data Abstraction)
Video: new vs. malloc (C++ for Data Abstraction)

Contenido


El nuevo y malloc () ambos se utilizan para asignar dinámicamente la memoria. Sin embargo, new y malloc () son diferentes en muchos contras. La principal diferencia entre new y malloc () es que nuevo es el operador, usado como una construcción. Por otro lado, el malloc () es una función de biblioteca estándar, utilizada para asignar memoria en tiempo de ejecución. Las otras diferencias entre ellas se analizan a continuación en la tabla de comparación:

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Conclusión

Cuadro comparativo

Bases para la comparaciónnuevomalloc ()
IdiomaEl operador new es una característica específica de C ++, Java y C #. La función malloc () es una característica de C.
Naturaleza"nuevo" es un operador.malloc () es una función.
tamaño de( )nuevo no necesita el tamaño del operador, ya que asigna suficiente memoria para un tipo específico malloc requiere que el operador sizeof sepa qué tamaño de memoria tiene que asignar.
Constructor El operador new puede llamar al constructor de un objeto.malloc () no puede hacer una llamada a un constructor.
InicializaciónEl operador new podría inicializar un objeto mientras le asigna memoria.La inicialización de la memoria no se pudo hacer en malloc.
Sobrecarga El operador nuevo se puede sobrecargar.El malloc () nunca se puede sobrecargar.
FracasoEn caso de falla, el operador nuevo lanza una excepción.En caso de fallo, malloc () devuelve un NULL.
DesasignaciónLa asignación de memoria por nuevo, desasignado utilizando "eliminar".La asignación de memoria por malloc () se desasigna utilizando una función free ().
ReasignaciónEl nuevo operador no reasigna memoria.La memoria asignada por malloc () se puede reasignar usando realloc ().
EjecuciónEl operador nuevo corta el tiempo de ejecución.El malloc () requiere más tiempo para la ejecución.


Definición de nuevo

El operador nuevo es un operador de asignación de memoria que asigna memoria dinámicamente. El nuevo operador asigna memoria en el montón y devuelve la dirección inicial de esa memoria que se asigna a una variable de referencia. El nuevo operador es similar al malloc () en C. Sin embargo, el compilador de C ++ es compatible con malloc () pero, es mejor usar un nuevo operador ya que tiene ciertas ventajas sobre malloc (). La sintaxis del nuevo operador es la siguiente:

tipo variable_nombre = nuevo tipo (parámetro_lista);

Aquí, "tipo" denota el tipo de datos de la variable para la cual se debe asignar la memoria. La palabra "nombre_variable" es el nombre dado a la variable de referencia que mantiene el puntero en la memoria. El paréntesis aquí especifica la llamada del constructor. El parámetro_list es la lista de los valores que se pasan al constructor para inicializar el objeto recién construido.


El nuevo operador asigna suficiente memoria requerida para un objeto de un tipo específico. Por lo tanto, no requiere un operador sizeof () ni requiere cambiar el tamaño de la memoria como malloc () que usa realloc () para reasignar la memoria. El nuevo operador es una construcción; llama al constructor de un objeto mientras que la declaración que generalmente se usa para inicializar el objeto.

Sabemos que el nuevo operador asigna la memoria en el montón y el tamaño del montón es limitado. Por lo tanto, si el montón no tiene memoria y el nuevo operador intenta asignar la memoria, provocará el fallo del nuevo operador. Si el nuevo operador no puede asignar la memoria, generará una excepción, y si su código no puede manejar esa excepción, el programa finaliza de manera anormal.

La memoria asignada por el operador nuevo se puede liberar utilizando el operador de eliminación. El nuevo operador corta el tiempo de ejecución ya que es un operador, no una función.

Definición de malloc ()

los malloc () es una función que se usa para asignar la cantidad de memoria solicitada en el montón. El método devuelve el puntero de tipo "nulo", que es más, escriba cast para obtener un puntero a una memoria de un tipo específico y este puntero a la memoria se asigna a una variable de referencia. La función malloc () es similar al nuevo operador en C ++, ya que se utiliza para asignar memoria dinámicamente. El malloc () es una función de biblioteca estándar. La sintaxis de la función malloc () es la siguiente:

tipo variable_name = (type *) malloc (sizeof (type));

Aquí, "tipo" indica el tipo de datos de la variable para la que se debe asignar memoria. Variable_name es el nombre de la variable de referencia a la que se asignará el puntero devuelto por malloc (). El (tipo *) describe el tipo de conversión para obtener un puntero a la memoria en un tipo específico. Sizeof () describe malloc (), que tamaño de memoria se requiere.

Malloc () requiere conversión de tipo porque el puntero devuelto por malloc () es de tipo nulo, por lo tanto, para asignar un tipo al puntero, se requiere conversión de tipo. Se requiere sizeof () porque la función malloc () asigna una memoria sin procesar, por lo tanto, es necesario decirle a la función malloc () qué tamaño de memoria tiene que asignar. Si la memoria asignada no es suficiente, puede redimensionarse o reasignarse usando realloc ().

La función malloc () asigna memoria en el montón. En caso de que el montón no tenga memoria, la función malloc () devuelve un puntero NULL. Por lo tanto, la variable de referencia que contiene el puntero devuelto por malloc (), debe verificarse antes de usarse, de lo contrario, puede provocar un bloqueo del sistema.

La memoria asignada por la función malloc () se desasigna utilizando free (). Como la llamada a la función conduce a una sobrecarga, malloc () requiere más tiempo para la ejecución.

  1. El nuevo operador es una construcción introducida en C ++ y utilizada en Java, C #, etc. Por otro lado, malloc () es una función de biblioteca estándar que solo se encuentra en lenguaje C y es compatible con C ++.
  2. El nuevo operador asigna suficiente memoria para el objeto de un tipo específico, por lo que no requiere un operador de dimensionamiento. Por otro lado, la función malloc () requiere que el operador sizeof () le permita a la función saber qué tamaño de memoria tiene que asignar.
  3. El nuevo operador puede llamar al constructor del objeto durante la declaración. Por otro lado, la función malloc () no puede llamar al constructor.
  4. El operador "nuevo" podría estar sobrecargado pero malloc () no.
  5. Si el nuevo operador no puede asignar la memoria, arroja una excepción que debe ser manejada por el código; de lo contrario, el programa finalizará. Por otro lado, la función malloc () devuelve un puntero NULL si no puede asignar memoria. Si el puntero se usa sin verificar esto, se producirá un bloqueo del sistema.
  6. La memoria asignada usando un nuevo operador se puede desasignar usando "eliminar". Por otro lado, la memoria asignada usando la función malloc () se puede desasignar usando free ().
  7. Una vez que la memoria se asigna utilizando un nuevo operador, no se puede cambiar su tamaño de ninguna manera. Por otro lado, la memoria asignada usando la función malloc () se puede reasignar (redimensionar) usando la función realloc ().
  8. El tiempo de ejecución de new es menor en comparación con malloc () porque malloc es una función y new es una construcción.

Conclusión:

La función malloc () es la forma antigua de asignar dinámicamente la memoria. Hoy en día, el nuevo operador se utiliza para asignar la memoria en tiempo de ejecución porque tiene ciertas ventajas sobre malloc ().