Raccomandato, 2020

Scelta Del Redattore

Differenza tra nuovo e malloc ()

Il nuovo e malloc () sono entrambi utilizzati per allocare dinamicamente la memoria. Sebbene, new e malloc () siano diversi in molti contesti. La differenza principale tra new e malloc () è che new è l'operatore, usato come costrutto. D'altra parte, malloc () è una funzione di libreria standard, utilizzata per allocare memoria in fase di runtime. Le altre differenze tra di loro sono discusse di seguito nella tabella di confronto:

Grafico comparativo

Base per il confrontonuovomalloc ()
linguaggioL'operatore new è una funzionalità specifica di C ++, Java e C #.La funzione malloc () è una funzionalità di C.
Natura"nuovo" è un operatore.malloc () è una funzione.
taglia di( )nuovo non ha bisogno dell'operatore sizeof per assegnare memoria sufficiente per tipo specificomalloc richiede l'operatore sizeof per sapere quale dimensione di memoria deve assegnare.
CostruttoreL'operatore nuovo può chiamare il costruttore di un oggetto.malloc () non può affatto chiamare il costruttore.
InizializzazioneL'operatore new potrebbe inizializzare un oggetto mentre assegna memoria ad esso.L'inizializzazione della memoria non può essere eseguita in malloc.
SovraccaricoL'operatore nuovo può essere sovraccaricato.Il malloc () non può mai essere sovraccaricato.
FallimentoIn caso di fallimento, l'operatore new lancia un'eccezione.In caso di errore, malloc () restituisce un valore NULL.
deallocazioneL'allocazione della memoria da parte di nuovi, deallocati utilizzando "cancella".L'allocazione della memoria da parte di malloc () viene deallocata usando una funzione free ().
RiallocazioneIl nuovo operatore non rialloca la memoria.La memoria allocata da malloc () può essere riallocata usando realloc ().
EsecuzioneL'operatore nuovo taglia il tempo di esecuzione.Il malloc () richiede più tempo per l'esecuzione.

Definizione di nuovo

L'operatore new è un operatore di allocazione della memoria che assegna la memoria dinamicamente. Il nuovo operatore alloca la memoria nell'heap e restituisce l'indirizzo iniziale di quella memoria che è assegnata a una variabile di riferimento. Il nuovo operatore è simile a malloc () in C. Tuttavia, il compilatore C ++ è compatibile con malloc (), ma è meglio usare il nuovo operatore in quanto presenta determinati vantaggi rispetto a malloc (). La sintassi del nuovo operatore è la seguente:

 tipo variable_name = new type (parameter_list); 

Qui, "tipo" indica il tipo di dati della variabile per cui la memoria deve essere allocata. La parola "nome_variabile" è il nome dato alla variabile di riferimento che contiene il puntatore alla memoria. La parentesi qui specifica la chiamata del costruttore. Parameter_list è l'elenco dei valori che vengono passati al costruttore per inizializzare l'oggetto appena costruito.

Il nuovo operatore assegna abbastanza memoria necessaria per un oggetto di un tipo specifico. Quindi, non richiede un operatore sizeof () né richiede di ridimensionare la memoria come malloc () che usa realloc () per riallocare la memoria. Il nuovo operatore è un costrutto; chiama il costruttore di un oggetto mentre la dichiarazione viene generalmente utilizzata per inizializzare l'oggetto.

Sappiamo che il nuovo operatore alloca la memoria nell'heap e la dimensione dell'heap è limitata. Quindi, se l'heap ha esaurito la memoria e il nuovo operatore tenta di allocare la memoria, ciò porterà al fallimento del nuovo operatore. Se il nuovo operatore non riesce ad allocare la memoria, genererà un'eccezione e, se il codice non è in grado di gestire tale eccezione, il programma termina in modo anomalo.

La memoria allocata dall'operatore new può essere liberata utilizzando l'operatore delete. Il nuovo operatore interrompe il tempo di esecuzione in quanto è un operatore, non una funzione.

Definizione di malloc ()

Malloc () è una funzione che viene utilizzata per allocare la quantità di memoria richiesta nell'heap. Il metodo restituisce il puntatore del tipo 'void' che è inoltre, digitare cast per ottenere un puntatore a una memoria di un tipo specificato e questo puntatore alla memoria viene assegnato a una variabile di riferimento. La funzione malloc () è simile al nuovo operatore in C ++ poiché viene utilizzata per allocare la memoria in modo dinamico. Malloc () è una funzione di libreria standard. La sintassi della funzione malloc () è la seguente:

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

Qui, "tipo" indica il tipo di dati della variabile per cui la memoria deve essere allocata. Variable_name è il nome della variabile di riferimento a cui verrà assegnato il puntatore restituito da malloc (). Il (tipo *) descrive il tipo di casting per ottenere un puntatore alla memoria in un tipo specifico. La sizeof () descrive malloc (), che è necessaria la dimensione della memoria.

Malloc () richiede il casting di tipo perché il puntatore restituito da malloc () è di tipo void, quindi, per assegnare un tipo al puntatore, è necessario digitare cast. La dimensione di () è richiesta poiché la funzione malloc () assegna una memoria non elaborata, quindi è necessario indicare alla funzione malloc () quale dimensione di memoria deve allocare. Se la memoria allocata non è sufficiente, può essere ridimensionata o riallocata utilizzando realloc ().

La funzione malloc () alloca la memoria sull'heap. Nel caso in cui l'heap abbia esaurito la memoria, la funzione malloc () restituisce un puntatore NULL. Quindi, la variabile di riferimento contenente il puntatore restituito da malloc (), deve essere verificata prima di essere utilizzata, altrimenti potrebbe verificarsi un arresto anomalo del sistema.

La memoria allocata dalla funzione malloc () viene deallocata utilizzando free (). Poiché la chiamata alla funzione porta a un sovraccarico, malloc () richiede più tempo per l'esecuzione.

Differenze chiave tra new e malloc ()

  1. Il nuovo operatore è un costrutto introdotto in C ++ e utilizzato in Java, C #, ecc. D'altra parte malloc () è una funzione di libreria standard disponibile solo in linguaggio C e supportata da C ++.
  2. Il nuovo operatore assegna abbastanza memoria per l'oggetto di un tipo specificato, quindi non richiede l'operatore di dimensionamento. D'altra parte, la funzione malloc () richiede l'operatore sizeof () per far sapere alla funzione che dimensione di memoria deve allocare.
  3. Il nuovo operatore può chiamare il costruttore dell'oggetto durante la dichiarazione. D'altra parte, la funzione malloc () non può chiamare il costruttore.
  4. L'operatore 'nuovo' potrebbe essere sovraccaricato ma malloc () non potrebbe.
  5. Se il nuovo operatore non riesce ad allocare la memoria, genera un'eccezione che deve essere gestita dal codice altrimenti il ​​programma verrà terminato. D'altra parte, la funzione malloc () restituisce un puntatore NULL se non riesce ad allocare memoria. Se il puntatore viene utilizzato senza verificarlo, si verificherà un arresto anomalo del sistema.
  6. La memoria allocata usando un nuovo operatore può essere deallocata usando 'cancella'. D'altra parte, la memoria allocata usando la funzione malloc () può essere deallocata usando free ().
  7. Una volta assegnata la memoria utilizzando un nuovo operatore, non è possibile ridimensionarla in alcun modo. D'altra parte, la memoria allocata usando la funzione malloc () può essere riallocata (ridimensionata) usando la funzione realloc ().
  8. Il tempo di esecuzione di new è inferiore rispetto a malloc () perché malloc è una funzione e new è un costrutto.

Conclusione:

La funzione malloc () è il vecchio modo di allocare dinamicamente la memoria. Al giorno d'oggi, il nuovo operatore viene utilizzato per allocare la memoria in fase di esecuzione perché presenta alcuni vantaggi rispetto a malloc ().

Top