Recomendado, 2024

La Elección Del Editor

Diferencia entre nuevo y malloc ()

El nuevo y malloc () se utilizan para asignar dinámicamente la memoria. Sin embargo, new y malloc () son diferentes en muchos contextos. La diferencia principal entre new y malloc () es que new es el operador, que se utiliza como 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 el cuadro comparativo:

Gráfica comparativa

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( )El nuevo no necesita que el operador sizeof asigne suficiente memoria para un tipo específicomalloc requiere que el operador sizeof sepa qué tamaño de memoria tiene que asignar.
ConstructorEl operador new puede llamar al constructor de un objeto.malloc () no puede hacer una llamada a un constructor.
InicializaciónEl operador nuevo podría inicializar un objeto mientras le asigna memoria.Inicialización de memoria no se pudo hacer en malloc.
SobrecargaOperador nuevo puede estar sobrecargado.El malloc () nunca puede ser sobrecargado.
FracasoEn caso de fallo, el operador nuevo lanza una excepción.En caso de error, malloc () devuelve un valor NULL.
DesasignaciónLa asignación de memoria por nuevo, desasignada usando "borrar".La asignación de memoria por malloc () se desasigna mediante una función free ().
ReasignaciónEl nuevo operador no reasigna memoria.La memoria asignada por malloc () se puede reasignar utilizando realloc ().
EjecuciónEl nuevo operador corta el tiempo de ejecución.El malloc () requiere más tiempo para su ejecución.

Definición de nuevo

El operador new 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 de inicio 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_name = nuevo tipo (lista_parámetros); 

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 que recibe la variable de referencia que guarda el puntero en la memoria. El paréntesis aquí especifica la llamada del constructor. La lista de parámetros 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 utiliza realloc () para reasignar la memoria. El nuevo operador es un constructo; llama al constructor de un objeto mientras 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 está fuera de la memoria y el nuevo operador intenta asignar la memoria, se producirá un error en el nuevo operador. Si el nuevo operador no puede asignar la memoria, lanzará una excepción, y si su código no puede manejar esa excepción, el programa termina de manera anormal.

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

Definición de malloc ()

El malloc () es una función que se utiliza para asignar la cantidad de memoria solicitada en el montón. El método devuelve el puntero del tipo 'void' 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:

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

Aquí, "tipo" indica el tipo de datos de la variable para la que se debe asignar la memoria. La variable nombre 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. El tamaño de () describe malloc (), que el tamaño de memoria es requerido.

El malloc () requiere conversión de tipo porque el puntero devuelto por malloc () es de tipo vacío, por lo tanto, para asignar un tipo al puntero, se requiere conversión de tipo. El tamaño de () se requiere porque la función malloc () asigna una memoria sin formato, por lo tanto, se requiere que le diga a la función malloc () que el tamaño de memoria tiene que asignar. Si la memoria asignada no es suficiente, puede redimensionarse o reasignarse utilizando realloc ().

La función malloc () asigna memoria en el montón. En caso de que el montón esté fuera de la memoria, la función malloc () devuelve un puntero NULO. Por lo tanto, la variable de referencia que contiene el puntero devuelto por malloc (), debe verificarse antes de que se use, de lo contrario, se puede producir una falla 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.

Diferencias clave entre new y malloc ()

  1. El nuevo operador es una construcción introducida en C ++ y utilizada en Java, C #, etc. Por otra parte, malloc () es una función de biblioteca estándar que se encuentra solo 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 operador de tamaño. Por otro lado, la función malloc () requiere que el operador sizeof () le haga saber a la función qué tamaño de memoria debe 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 pudo.
  5. Si el nuevo operador no puede asignar la memoria, lanza una excepción que debe ser manejada por el código, de lo contrario el programa terminará. Por otro lado, la función malloc () devuelve un puntero NULO si no puede asignar memoria. Si se utiliza el puntero sin verificar esto, se producirá un bloqueo del sistema.
  6. La memoria asignada usando un nuevo operador puede ser desasignada usando 'borrar'. Por otro lado, la memoria asignada mediante la función malloc () se puede desasignar utilizando free ().
  7. Una vez que la memoria se asigna mediante un nuevo operador, no se puede cambiar el tamaño de ninguna manera. Por otro lado, la memoria asignada mediante la función malloc () puede reasignarse (redimensionarse) mediante 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 usa para asignar la memoria en tiempo de ejecución porque tiene ciertas ventajas sobre malloc ().

Top