Gráfica comparativa
Bases para la comparación | nuevo | malloc () |
---|---|---|
Idioma | El 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í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ón | El operador nuevo podría inicializar un objeto mientras le asigna memoria. | Inicialización de memoria no se pudo hacer en malloc. |
Sobrecarga | Operador nuevo puede estar sobrecargado. | El malloc () nunca puede ser sobrecargado. |
Fracaso | En caso de fallo, el operador nuevo lanza una excepción. | En caso de error, malloc () devuelve un valor NULL. |
Desasignación | La asignación de memoria por nuevo, desasignada usando "borrar". | La asignación de memoria por malloc () se desasigna mediante una función free (). |
Reasignación | El nuevo operador no reasigna memoria. | La memoria asignada por malloc () se puede reasignar utilizando realloc (). |
Ejecución | El 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 ()
- 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 ++.
- 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.
- 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.
- El operador 'nuevo' podría estar sobrecargado, pero malloc () no pudo.
- 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.
- 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 ().
- 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 ().
- 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 ().