Domanda

In un programma incorporato Ho un oggetto di pagina che ha bisogno di gestire un elenco di elementi da visualizzare. L'elenco iniziale di voci sarà tirato da un semplice DB carico schermo e l'elenco sarà aggiornato tramite "Aggiungi" e "Rimuovi" eventi. Questo elenco deve essere ordinati in base a determinati criteri. Cerco di una classe contenitore che può aiutarmi a realizzare questo. Inoltre non v'è alcuna memoria dinamica nel sistema in modo ho bisogno di avere un pool di memoria di oggetti vuoti che posso caricare in un contenitore e tornare alla piscina libero quando mi sono fatto con la voce.

Qualcuno sa di qualcosa di appropriato nella libreria standard C ++ o Boost? O forse un'altra soluzione?

È stato utile?

Soluzione

Se si utilizza un container standard (come std::map o std::set) è necessario preoccuparsi di diverse allocazioni dinamiche: l'assegnazione delle strutture dati interne del contenitore e l'assegnazione del proprio dati che si desidera memorizzare nel contenitore. L'assegnazione delle strutture dati interne può essere personalizzato fornendo il proprio std :: allocator (sono sicuro che sarete in grado di trovare un raccordo vostre esigenze, ci sono un sacco di quelli disponibili). L'assegnazione delle proprie strutture di dati ha bisogno di essere gestito separatamente, più comunemente mediante l'attuazione di specifici operatori new e delete tipo. Scott Meyers ha un bell'articolo su questo in uno dei suoi libri.

Un'altra soluzione potrebbe essere quella di utilizzare Boost.Intrusive, una serie di contenitori in cui tutti gli elementi di dati interne necessarie per il contenitore sono memorizzati nelle proprie strutture di dati (è per questo che essi sono chiamati invadente). In questo modo si solleva da avere due diversi schemi di allocazione sul posto, come si deve preoccupare solo il proprio allocazione dei dati.

Altri suggerimenti

perché non utilizzare STL, ma fornire il proprio allocatore e deallocatore, ad esempio STL vettore è definito come template<class T,class A = std::allocator<T>> vector {}, è possibile creare e impostare il proprio allocatore che richiedere lo spazio di memoria dal pool di memoria.

Per quanto riguarda allocatore di memoria, è possibile utilizzare la memoria allocatore esistente, come Hoard http://www.hoard.org/ , o Ned Allocatore http://www.nedprod.com/programs/portable/ nedmalloc / che è abbastanza elevate prestazioni e buona per sistemi embedded.

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