Pergunta

Em um programa incorporado Eu tenho um objeto de tela que as necessidades de gerir uma lista de itens para mostrar. A lista inicial de itens será puxado de um DB simples na carga tela ea lista será atualizada via e eventos "Adicionar" em "Remover". Esta lista precisa ser resolvido de acordo com determinados critérios. Estou à procura de uma classe recipiente que pode me ajudar a conseguir isso. Além disso não há nenhuma memória dinâmica no sistema assim que eu preciso para ter um pool de memória de itens vazias que eu posso carregar no recipiente e voltar para o pool livre quando estou a fazer com o item.

Alguém sabe de nada apropriado na biblioteca padrão C ++ ou impulso? Ou talvez uma outra solução?

Foi útil?

Solução

Se você usar um recipiente padrão (como std::map ou std::set) você precisa se preocupar com diferentes alocações dinâmicas: a alocação das estruturas de dados recipiente interno e a alocação de seus próprios dados que deseja armazenar no recipiente. A alocação das estruturas de dados internos pode ser personalizado através do fornecimento de seu próprio std :: alocador (eu tenho certeza que você vai ser capaz de encontrar um encaixe às suas necessidades, há uma abundância dos disponíveis). A alocação de suas próprias estruturas de dados precisa ser tratada separadamente, mais comumente através da implementação de operadores de tipo new específico e delete. Scott Meyers tem um bom artigo sobre isso em um de seus livros.

Outra solução seria utilizar Boost.Intrusive, um conjunto de recipientes onde todos os itens de dados internos necessários para o recipiente são armazenados em suas próprias estruturas de dados (é por isso que eles são chamados intrusiva). Isso você alivia de ter dois esquemas de alocação diferentes no lugar, como você precisa se preocupar com apenas a sua própria alocação de dados.

Outras dicas

por que não usar STL, mas fornecer seu próprio alocador e desalocador, para o vetor exemplo STL é definida como template<class T,class A = std::allocator<T>> vector {}, você pode criar e definir o seu próprio alocador que o espaço pedido de memória do seu pool de memória.

como para alocador de memória, você usa alocador de memória existente, como Hoard http://www.hoard.org/ , ou Ned Allocator http://www.nedprod.com/programs/portable/ nedmalloc / que é bastante elevado desempenho e bom para sistemas embarcados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top