Como evitar a falta de memória no aplicativo de alto uso de memória? C / C ++

Eu escrevi um conversor que pega os arquivos xml openstreetmap e os converte em um formato de renderização em tempo de execução binário que normalmente é cerca de 10% do tamanho original. Os tamanhos dos arquivos de entrada costumam ter 3 GB ou mais. Os arquivos de entrada não são carregados na memória de uma só vez, mas transmitidos à medida que pontos e polys são coletados, então um bsp é executado neles e o arquivo é gerado. Recentemente, em arquivos maiores, fica sem memória e morre (o que está em questão possui 14 milhões de pontos e 1 milhão de polígonos). Normalmente, meu programa está usando de 1 a 1,2 GB de RAM quando isso acontece. Tentei aumentar a memória virtual de 2 para 8gb (no XP), mas essa alteração não teve efeito. Além disso, como esse código é de código aberto, eu gostaria que ele funcionasse independentemente da memória RAM disponível (embora mais lenta), e roda em Windows, Linux e Mac.

Que técnicas posso usar para evitar que a memória fique sem memória? Processando os dados em subconjuntos menores e depois mesclando os resultados finais? Usando meu próprio tipo de manipulador de memória virtual? Alguma outra idéia?

questionAnswers(15)

yourAnswerToTheQuestion