2013-07-25 10 views
8

Durante la lettura di libri su C++ e la libreria standard, vedo frequenti riferimenti agli allocatori.Quali sono gli allocatori e quando è necessario il loro uso?

Per esempio, di Nicolai Josuttis Il C++ standard Biblioteca li discute in dettaglio nel capitolo precedente, e entrambe le voci 10 ("essere a conoscenza delle convenzioni Ripartitori & restrizioni ') e 11 (' comprendere gli usi legittimi personalizzato allocatori ") in Scott Meyers Efficace STL sono circa il loro uso.

La mia domanda è: in che modo gli allocatori rappresentano uno speciale modello di memoria? La gestione della memoria STL predefinita non è sufficiente? Quando invece dovrebbero essere usati gli allocatori?

Se possibile, spiegare con un esempio di modello di memoria semplice.

+0

Possibilmente correlato: [Esempi convincenti di allocatori personalizzati di C++ STL?] (Http://stackoverflow.com/q/826569) –

risposta

8

Un allocatore astrae l'allocazione della memoria non elaborata e la costruzione/distruzione di oggetti in tale memoria.

Nella maggior parte dei casi, l'Allocatore predefinito è perfettamente a posto. In alcuni casi, tuttavia, puoi aumentare l'efficienza sostituendola con qualcos'altro. L'esempio classico è quando hai bisogno/vuoi allocare un gran numero di oggetti molto piccoli. Si consideri, ad esempio, un vettore di stringhe che potrebbero essere ciascuna solo una dozzina di byte o giù di lì. L'allocatore normale utilizza operator new, che potrebbe imporre un overhead piuttosto elevato per tali oggetti di piccole dimensioni. Creare un allocatore personalizzato che allochi una parte più grande della memoria, quindi suddividerlo in base alle necessità può risparmiare un bel po 'di memoria e tempo.

Problemi correlati