Pregunta

En un programa integrado que tienen un objeto de imagen que necesita para gestionar una lista de elementos para mostrar. La lista inicial de elementos se tiró desde una simple base de datos de la carga de la pantalla y se actualizará la lista a través de "Agregar" y "Eliminar" eventos. Esta lista tiene que ser resuelto de acuerdo con ciertos criterios. Busco una clase de contenedor que puede ayudarme a lograr esto. Además, no hay memoria dinámica en el sistema por lo que necesita tener un banco de memoria de elementos vacíos que puedo cargar en el recipiente y volver a la piscina libre cuando haya terminado con el artículo.

Alguien sabe de nada apropiado en la Biblioteca C ++ estándar o Boost? O quizás otra solución?

¿Fue útil?

Solución

Si utiliza un contenedor estándar (como std::map o std::set) que hay que preocuparse acerca de las diferentes asignaciones dinámicas: la asignación de las estructuras de datos internas de contenedores y la asignación de sus propios datos que desea almacenar en el contenedor. La asignación de las estructuras internas de datos se puede personalizar mediante el suministro de su propia std :: asignador (estoy seguro de que serás capaz de encontrar uno ajustadas a sus necesidades, hay un montón de los que están disponibles). La asignación de sus propias estructuras de datos necesita ser manejado por separado, por lo general mediante la aplicación de los operadores new y delete específicos del tipo. Scott Meyers tiene un buen artículo sobre esto en uno de sus libros.

Otra solución sería utilizar Boost.Intrusive, un conjunto de contenedores, donde todos los elementos de datos internos necesarios para el contenedor se almacenan en sus propias estructuras de datos (por eso se les llama intrusiva). Esto le libera de tener dos diferentes esquemas de asignación en su lugar, ya que tienes que preocuparse solamente de su propia asignación de datos.

Otros consejos

¿por qué no usar STL, sino proporcionar su propio asignador y deallocator, por ejemplo vector de STL se define como template<class T,class A = std::allocator<T>> vector {}, puede crear y establecer su propio asignador que solicitar espacio de memoria de su bloque de memoria.

En cuanto a asignador de memoria, se utiliza asignador de memoria existente, como Tesoro http://www.hoard.org/ , o Ned Allocator http://www.nedprod.com/programs/portable/ nedmalloc / que es bastante alto rendimiento y buena para el sistema embebido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top