Malloc vs New
Una delle domande più frequenti nell'intervista per assumere un programmatore è per il richiedente / programmatore di computer spiegare le differenze tra malloc e nuovo. Sia malloc che new esistono nel regno del linguaggio del computer e sono spesso usati dai programmatori per allocazioni dinamiche della memoria.
Le differenze fondamentali tra i due sono che Malloc esiste nel linguaggio C, mentre il nuovo è una caratteristica specifica del linguaggio C ++. Malloc è anche una funzione (che, per i programmatori, richiede un po 'di tempo per l'esecuzione) mentre il nuovo è un programma operatore (che riduce il tempo di esecuzione). Questo è un vantaggio dell'operatore nuovo perché i programmatori che eseguono la programmazione in tempo reale hanno bisogno di scegliere il metodo più veloce da utilizzare.
L'operatore new è sicuro dal tipo a differenza della funzione malloc.
La funzione malloc è la funzione di libreria per il linguaggio C. Tutto ciò che fa è allocare memoria e restituire un puntatore ad esso. D'altra parte, l'operatore new è un costrutto a livello di linguaggio e il suo compito è istanziare un oggetto allocando memoria e chiamando i costruttori appropriati. Un'altra differenza della funzione malloc da parte dell'operatore new è che malloc richiede la tipizzazione durante la dichiarazione mentre la prima non lo fa. Inoltre, la funzione malloc utilizza la parola "free" per cancellare la memoria mentre "delete" viene utilizzato nell'operatore new per lo stesso scopo.
I due hanno anche diversi modi di affrontare il fallimento e l'esaurimento della memoria. Se la funzione malloc fallisce, ritorna con un puntatore NULL. L'operatore new non restituisce mai un puntatore NULL ma indica l'errore generando invece un'eccezione. Questo è un vantaggio per l'operatore nuovo poiché il programmatore non deve controllare il puntatore restituito ogni volta che chiama nuovo, né il programmatore di computer salterà tale eccezione.
La funzione malloc non costruisce un oggetto (chiamato costruttore di oggetti) ma l'operatore new fa. Un altro vantaggio del nuovo è che l'operatore può essere sovraccaricato mentre la funzione malloc non può essere sovraccaricata. L'operatore new richiede un numero specifico di oggetti da allocare mentre la funzione malloc richiede di specificare il numero totale di byte da allocare.
La memoria può anche essere ridimensionata o riallocata usando la funzione malloc usando realloc. Tuttavia, l'operatore nuovo non può eseguire questa funzione e lo considera uno degli svantaggi principali dell'operatore. Un altro vantaggio della funzione malloc over operator new è che malloc può estendere rapidamente la quantità di memoria. Questo sta ancora usando malloc e realloc. Quando si fa la stessa situazione in linguaggio C ++, il programmatore deve creare un nuovo blocco di memoria con operatore nuovo. La nuova memoria deve avere una dimensione modificata e verrà copiata sui dati dal buffer originale. Il buffer originale deve essere cancellato dopo la copia. Questo può essere un processo lento per un programmatore.
L'operatore new ha fatto leva sulla funzione malloc restituendo il tipo di dati esatto mentre la funzione restituisce void *. Anche la funzione malloc non può essere sovraccaricata rispetto all'operatore nuovo in cui è possibile il sovraccarico. Un'altra caratteristica dell'operatore nuovo è che ci sono meno possibilità di commettere errori con l'operatore rispetto alla funzione malloc. Questo è considerato un vantaggio per i programmatori, specialmente se stanno scrivendo molti codici o stanno lavorando su un codice su un programma serrato. La funzione malloc e free può essere utilizzata in C ++, ma non può essere utilizzata direttamente. Si consiglia di utilizzare nuovo ed eliminare invece.
Sommario:
1. Malloc è una funzione mentre il nuovo è un operatore.
2. New è una caratteristica specifica del linguaggio C ++ mentre malloc è usato nel linguaggio C..
3. L'operatore new segue con "cancella" mentre la funzione malloc va con "free".
4. La funzione malloc è la funzione di libreria per il linguaggio C, mentre l'operatore new è un costrutto a livello di linguaggio dal linguaggio C ++.