Estou desenvolvendo alguns algoritmos em Lua, que são executados principalmente em Lua (poucas chamadas para C ++) e estou percebendo uma grande lentidão quando os estou executando no meu aplicativo, em vez do interpretador Lua padrão. O script retorna em aproximadamente 11 segundos com o intérprete e em mais de 5 minutos no meu programa.
Eu não acho que seja um problema chamar a função C ++, substituir essa função por uma função vazia no script não tem efeito perceptível por um tempo.
Lua e o programa são compilados com o Visual Studio 2010 (criei uma nova solução para Lua, com projetos para o intérprete e a biblioteca estática)
Eu executei um criador de perfil no código (o Very Sleepy Profiler, não pode fazer com que um criador de Lua funcione, mas ainda não tentei muito) e descobri que no meu aplicativo cerca de 50% do tempo é gasto em malloc .. e Com 40% de graça, ambos chamados pelo coletor de lixo Lua (tentei desabilitar isso para verificar, mas isso trava com o uso de muita memória (compreensivelmente)), o intérprete Lua espia cerca de 4 MB de uso de RAM).
Eu sou novo em Lua, então é muito possível que eu tenha feito algo errado em algum lugar, alguém tem algumas dicas para tentar?
Respostas:
Como você diz, Lua faz alocações de memória como loucas por padrão. Você deve escrever um alocador personalizado que tenha melhor conhecimento dos padrões de alocação normalmente usados pelos programas Lua ou conectar algo como tcmalloc para obter melhor desempenho da alocação.
fonte