Pergunta

Eu estou olhando para aplicar um KMP (ou similar) procurar a um arquivo grande (> 4GB).

Eu estou esperando isso para me dar problemas though.I não pode copiar tudo para a memória, porque não há espaço suficiente lá.

A minha pergunta é, qual é a melhor maneira de ir sobre como fazer esta pesquisa? Devo simplesmente criar um FILE * e fazer a pesquisa diretamente no arquivo, eu deveria copiar blocos (dizem 4k) a memória e procurar aqueles, ou qualquer outra coisa completamente?

Foi útil?

Solução

Se você estiver usando uma plataforma que suporta, você pode usar mmap (). Paginação do arquivo também é uma possibilidade, mas lembre-se de manter o tampão tão grande quanto possível para reduzir o IO cima, e ter cuidado entre os limites de duas páginas (suponha que uma string é correspondente, mas é dividida pela fronteira da página)

Como alternativa, sugiro que você construa um índice de algum tipo, e usar o índice para restringir a pesquisa. Pesquisa KMP não é particularmente eficiente. Isto, obviamente, depende da natureza do seu arquivo, como ele é criado, etc.

scroll top