Una possibilità potrebbe essere quella di scrivere il proprio allocatore. Questo può essere particolarmente efficace se si dispone di almeno una buona idea di quanti elementi sono suscettibili di andare nella tabella (in modo da poter pre-allocare spazio per tutti) e non si cura di ri-utilizzando lo spazio per gli oggetti se vengono rimossi dal tavolo (quindi la vostra contabilità è semplice).
In tal caso, si può sostanzialmente pre-allocare spazio per N oggetti, e semplicemente tenere traccia della posizione dell'elemento successivo da assegnare. Assegnare l'oggetto consiste semplicemente nel restituire l'indirizzo e incrementare il puntatore, come in
Naturalmente, questo non elimina veramente l'allocazione dinamica - lo rende abbastanza economico che probabilmente non ti interessa più (e dato che è fornito come parametro template, c'è una buona probabilità che venga espanso in linea, quindi non si ottiene nemmeno il sovraccarico di una chiamata di funzione nel processo
Anche se non si riesce a mettere con abbastanza restrittivo di un allocatore, un allocatore general-purpose per oggetti a dimensione fissa sarà sempre (almeno in qualche modo) più veloce di uno per dimensioni variabili di oggetti, ma non eliminerà l'allocazione dinamica, ma potrebbe dare abbastanza miglioramento della velocità per lavorare abbastanza un po 'meglio per il tuo scopo.
fonte
2013-10-22 02:14:10
È possibile impostare la dimensione della benna e il numero di benne che corrisponderanno alle dimensioni della mappa – aaronman
Ho provato 'reserve' utilizzando un tipo con effetto collaterale nel suo costruttore. Sembra che in realtà non riserva memoria né per le chiavi, né per i valori. http://ideone.com/yH746X –
@ polkovnikov.ph Sono d'accordo, si riserva solo spazio per i secchi non per chiavi e valori – Medicine