Differenza tra new e malloc ()

Autore: Laura McKinney
Data Della Creazione: 1 Aprile 2021
Data Di Aggiornamento: 5 Maggio 2024
Anonim
How to use malloc to dynamically allocate memory
Video: How to use malloc to dynamically allocate memory

Contenuto


Il nuovo e malloc () sono entrambi usati per allocare dinamicamente la memoria. Tuttavia, new e malloc () sono diversi sotto molti aspetti. La differenza principale tra new e malloc () è quella nuovo è l'operatore, usato come costrutto. D'altra parte, il malloc () è una funzione di libreria standard, utilizzata per allocare memoria in fase di esecuzione. Le altre differenze tra loro sono discusse di seguito nella tabella di confronto:

  1. Tabella di comparazione
  2. Definizione
  3. Differenze chiave
  4. Conclusione

Tabella di comparazione

Base per il confrontonuovomalloc ()
linguaggioL'operatore new è una funzionalità specifica di C ++, Java e C #. La funzione malloc () è una caratteristica di C.
Natura"nuovo" è un operatore.malloc () è una funzione.
taglia di( )new non ha bisogno che l'operatore sizeof assegni sufficiente memoria per un tipo specifico malloc richiede all'operatore sizeof di sapere quale dimensione di memoria deve assegnare.
Costruttore L'operatore new può chiamare il costruttore di un oggetto.malloc () non può assolutamente effettuare una chiamata a un costruttore.
InizializzazioneL'operatore new potrebbe inizializzare un oggetto mentre alloca memoria ad esso.Impossibile inizializzare la memoria in malloc.
Sovraccarico L'operatore nuovo può essere sovraccarico.Malloc () non può mai essere sovraccaricato.
FallimentoIn caso di errore, l'operatore new genera un'eccezione.In caso di errore, malloc () restituisce un NULL.
deallocazioneL'allocazione di memoria da parte di nuovi, deallocata utilizzando "elimina".L'allocazione di memoria 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 riduce i tempi di esecuzione.Malloc () richiede più tempo per l'esecuzione.


Definizione di nuovo

L'operatore nuovo è un operatore di allocazione della memoria che alloca la memoria in modo dinamico. 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 alcuni vantaggi rispetto a malloc (). La sintassi del nuovo operatore è la seguente:

tipo nome_varia = nuovo tipo (elenco_parametri);

Qui, "tipo" indica il tipo di dati della variabile per cui deve essere allocata la memoria. La parola "nome_variabile" è il nome assegnato 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 alloca memoria sufficiente per un oggetto di un tipo specifico. Quindi, non richiede un operatore sizeof () né richiede di ridimensionare la memoria come malloc () che utilizza 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. Pertanto, se l'heap ha esaurito la memoria e un nuovo operatore tenta di allocare la memoria, si verificherà un errore del nuovo operatore. Se il nuovo operatore non riesce a 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 usando l'operatore delete. Il nuovo operatore interrompe i tempi di esecuzione in quanto è un operatore, non una funzione.

Definizione di malloc ()

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

digitare nome_variabile = (tipo *) malloc (sizeof (tipo));

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

Malloc () richiede il cast di tipo perché il puntatore restituito da malloc () è di tipo vuoto, quindi, per assegnare un tipo al puntatore, è richiesto il cast di tipo. Sizeof () è necessario perché la funzione malloc () alloca una memoria non elaborata, quindi è necessario dire alla funzione malloc () che le dimensioni della memoria deve allocare. Se la memoria allocata non è sufficiente, può essere ridimensionata o riallocata utilizzando realloc ().

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

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

  1. Il nuovo operatore è un costrutto introdotto in C ++ e utilizzato in Java, C #, ecc. D'altra parte malloc () è una funzione di libreria standard trovata solo in linguaggio C e supportata da C ++.
  2. Il nuovo operatore alloca memoria sufficiente per l'oggetto di un tipo specificato, quindi non richiede un operatore di dimensionamento. D'altra parte, la funzione malloc () richiede che l'operatore sizeof () comunichi alla funzione quale 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 sovraccarico, ma malloc () no.
  5. Se il nuovo operatore non riesce a allocare la memoria, genera un'eccezione che deve essere gestita dal codice altrimenti il ​​programma verrà chiuso. D'altra parte, la funzione malloc () restituisce un puntatore NULL se non riesce a 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 "elimina". D'altra parte, la memoria allocata usando la funzione malloc () può essere deallocata usando free ().
  7. Una volta allocata la memoria utilizzando un nuovo operatore, non può essere ridimensionata 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 ().