Thread pool de memória segura

tualmente, o aplicativo @My é altamente crítico em termos de desempenho e solicita de 3-5 milhões de objetos por quadro. Inicialmente, para fazer a bola rolar, eunew'd tudo e conseguiu que o aplicativo funcionasse e testasse meus algoritmos. O aplicativo é multiencadeado.

Quando fiquei feliz com o desempenho, comecei a criar um gerenciador de memória para meus objetos. A razão óbvia é a fragmentação e o desperdício de memória. O aplicativo não pôde continuar por mais de alguns quadros antes de travar devido à fragmentação da memória. Verifiquei se há vazamentos de memória e sei que o aplicativo está livre de vazamentos.

Então, comecei a criar um gerenciador de memória simples usando o TBBconcurrent_queue. A fila armazena um conjunto máximo de elementos que o aplicativo pode usar. A classe que requer novos elementos exibe elementos da fila. Otry_pop método @ é, de acordo com a documentação da Intel, sem bloqueios. Isso funcionou muito bem no que diz respeito ao consumo de memória (embora ainda haja fragmentação da memória, mas não tanto quanto antes). O problema que estou enfrentando agora é que o desempenho do aplicativo diminuiu aproximadamente 4 vezes, de acordo com meu próprio criador de perfil simples (não tenho acesso a criadores de perfil comerciais ou conheço algum que funcione em um aplicativo em tempo real ... qualquer recomendação seria apreciado)

Minha pergunta é: existe um pool de memória com segurança para threads escalável. UMAmust-have recurso @ da piscina é a reciclagem rápida de elementos e a sua disponibilização. Se não houver, dicas / truques sobre desempenho?

EDITAR Pensei em explicar um pouco mais o problema. Eu poderia inicializar facilmenten número de matrizes em quen é o número de threads e começa a usar os objetos das matrizes por thread. Isso funcionará perfeitamente em alguns casos. No meu caso, também estou reciclando os elementos (potencialmente todos os quadros) e eles podem ser reciclados em qualquer ponto da matriz; ou seja, pode ser deelementArray[0] ouelementArray[10] ouelementArray[1000] parte da matriz. Agora terei uma matriz fragmentada de elementos que consiste em elementos prontos para uso e elementos em uso:

questionAnswers(3)

yourAnswerToTheQuestion