Domanda

Quali nuovi tipi di funzionalità (per il debug o meno) trovi utili ignorando il nuovo operatore?

È stato utile?

Soluzione

Il motivo principale per cui ho dovuto sovraccaricare new è stato per le prestazioni. Un esempio è l'allocazione di un numero elevato di piccoli oggetti, che è spesso piuttosto lento con un allocatore per uso generale, ma spesso può essere migliorato un lotto con un allocatore personalizzato.

Altri suggerimenti

Ci sono molti casi in cui è necessario eseguire l'override dell'operatore new. Come qualcuno ha detto, è principalmente per la gestione della memoria personalizzata.

L'esempio principale che ho affrontato personalmente è stato per i sistemi embedded.

In un sistema incorporato, l'allocazione dinamica della memoria è di solito un problema. Anche se disponi di un sistema operativo incorporato che lo supporta, hai tutti i tipi di problemi che potresti dover affrontare (ad esempio, i sistemi incorporati spesso devono essere più deterministici rispetto alle loro controparti PC. Inoltre, potresti lavorare su un sistema che dovrebbe durare anni per volta, nel qual caso la frammentazione della memoria è un vero problema).

Per questo motivo, i sistemi integrati tendono a non consentire l'allocazione dinamica della memoria.

Naturalmente, nella maggior parte dei progetti software è necessario un po 'di forma di memoria dinamica, e in quei casi generalmente si implementa il proprio (vale a dire, si ha un qualche tipo di pool di memoria che tutti i thread possono chiedere memoria da, ecc.).

Per fare in modo che i progetti C ++ utilizzino questa allocazione dinamica di memoria a mano nel modo più semplice, ho visto i progetti sostituire l'operatore nuovo per utilizzare il metodo di allocazione del progetto.

Bene, gestione della memoria personalizzata e debug. Questo è tutto, e anche tutto ciò che puoi uscirne.

Potresti sviluppare una libreria che richiede una fase aggiuntiva nell'inizializzazione di determinati oggetti, il sovraccarico ti consente di farlo senza alcune chiamate extra ingombranti che l'utente finirebbe per dover scrivere.

Se si lavora con SSE / SIMD, in genere è necessario che la memoria sia allineata a 4 parole, quindi è possibile sovraccaricare new affinché le classi pertinenti possano utilizzare memalign () (mentre il nuovo predefinito sta facendo qualcosa di equivalente al semplice malloc () ).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top