Per quanto riguarda i rispettivi standard linguistici, C offre allocazione dinamica della memoria solo tramite la famiglia malloc()
, mentre in C++ la forma di allocazione più comune viene eseguita da ::operator new()
. Il malloc in stile C è anche disponibile in C++, e molti esempi di "primo allocatore del bambino" lo usano come funzione di allocazione principale, ma sono curioso di sapere come i compilatori contemporanei implementino l'operatore di produzione attuale, nuovo.L'allocazione della memoria dinamica differisce in C e C++ nelle implementazioni più diffuse?
È solo un involucro sottile attorno a malloc()
o è implementato in modo fondamentalmente diverso a causa del comportamento di allocazione della memoria piuttosto diverso di un tipico programma C++ rispetto a un tipico programma C?
[Edit: Credo che la differenza principale è di solito descritta come segue: un programma di C ha meno, più grandi, assegnazioni di lunga durata, mentre un programma C++ ha molti, piccolo, assegnazioni di breve durata. Sentitevi liberi di intervenire se questo è sbagliato, ma sembra che uno trarrebbe beneficio dal tenerne conto.]
Per un compilatore come GCC, sarebbe facile avere solo un'implementazione di allocazione core singola e usarlo per tutti i rilevanti lingue, quindi mi chiedo se ci sono differenze nei dettagli che cercano di ottimizzare le prestazioni di allocazione risultanti in ciascuna lingua.
Update: Grazie per tutte le grandi risposte! Sembra che in GCC questo sia completamente risolto da ptmalloc e che MSVC utilizzi anche lo malloc
al centro. Qualcuno sa come viene implementato MSVC-malloc?
(Sarei felice di conoscere i compilatori non GCC, se qualcuno dovesse avere qualche approfondimento.) –