In una parte del programma di importanza temporale c'è un membro della classe simile a questo: std :: vector m_vLinks; Durante la profilazione ho notato che circa il 99,98% delle esecuzioni in questo vettore contiene solo 0 o 1 elementi. Tuttavia in casi molto rari potrebbe trattenere di più. Questo vettore è sicuramente un collo di bottiglia secondo il profiler, così sto pensando di seguire ottimizzazione:std :: classe di tipo vettoriale ottimizzata per contenere un numero ridotto di elementi
- Craft una classe fatta a mano con il vettore-come l'interfaccia
- Questa classe terrà vera dimensione, un elemento e puntatore opzionale al vettore
- In questo caso quando il vettore contiene 1 elemento non ci saranno allocazioni di memoria dinamica, e anche l'accesso a questo elemento sarà (un po ') più veloce a causa della rimozione di un punto di riferimento.
- Quando occorre tenere vettore più dati viene allocata dinamicamente
- Naturalmente questo vettore non fornirà un blocco di memoria in possesso di tutti gli elementi (non necessario qui), e anche alcune operazioni sarà più complesso
Prima di iniziare a prototipare questa cosa per vedere se aiuta, mi chiedo se qualcuno abbia incontrato contenitori personalizzati con funzionalità simili in alcune librerie di terze parti?
ho già pensato a boost :: array, ma non vogliono limite di dimensione che impone
Quali operazioni eseguono esattamente la maggior parte del tempo nello scenario? – sharptooth
rappresenta un collo di bottiglia perché ne crei di nuovi di frequente? In tal caso dubito che la tua ottimizzazione possa aiutare molto ... –
Assegnare e liberare il buffer dinamico del vettore (Io uso il pool di oggetti per contenere oggetti che hanno questo membro, ma in ogni caso è necessario pulirli periodicamente scambiando il vettore di Links con il vettore vuoto, sebbene questa operazione non è frequente). –