Pergunta

Existe uma maneira de ler diretamente um arquivo binário na memória RAM?

O que quero dizer é, existe uma maneira de dizer ao compilador, aqui está o arquivo, aqui está o bloco de RAM, por favor, coloque o conteúdo do arquivo na RAM, temos que ir, rapidamente como você pode agradar.

Atualmente estou percorrendo o arquivo com carga ifstream-lo na memória RAM (uma matriz) bloco de 64 bits por bloco de 64 bits. Mas eu estou pensando que isso deve retardá-lo como ele é como (aqui vem uma analogia) usando um dedal para socorrer a água fora de um copo (o arquivo) em um jarro (RAM) ao invés de apenas pegar o copo e derrubando todo o conteúdo na jarra de uma vez.

Como um parente recém-chegado a este I pode ter completamente a idéia errada sobre isso -. Qualquer guidence seria uma grande ajuda

Eu sou apenas após o meio mais rápido para obter um arquivo grande para a RAM.

Graças

Foi útil?

Solução

O que o impede de ler o arquivo em uma passagem? É demasiado grande para caber na memória?

Você também pode usar arquivo mapeado, UNIX: mmap, o Windows: CreateFileMapping

Outras dicas

Eu acho que você precisa é memória arquivo mapeado , no entanto, a API depende qual sistema operacional você está, no UNIX Eu acredito que é mmap ().

mmap deve trabalhar para você. A maioria das implementações realmente não ler o arquivo até que você faz referência as páginas de memória real, mas em qualquer caso, você pode acessar o conteúdo do arquivo como se fosse na memória RAM todo o tempo.

Você não diz qual plataforma você está, mas isso soa como um trabalho para arquivos mapeados na memória.

Seu programa é dado a memória virtual - alguns dos que é mapeado sobre RAM, alguns em arquivo de swap e você não pode fazer muito sobre isso. No entanto, você pode reduzir a sobrecarga de usar a interface do sistema de arquivos por apenas copiando blocos maiores -. Vários megabytes por exemplo

Eu não tenho certeza se é isso que você está perguntando, mas para acelerar a leitura de um arquivo que você poderia tampão mais bytes. o segundo argumento do método de leitura () de fstream pode ser definido para especificar o tamanho de entrada. dando-lhe, por exemplo, um valor de 32 K (32 * (2 ^ 10)) podem acelerar o processo de leitura. Eu sugiro que você faça alguma benchmarking com tamanho do buffer diferente.

Se você quer dizer "evitar colocar o arquivo em swap e colocá-lo sempre na RAM" Eu acho que você pode, uma vez que este é algo que o OS cuida.

Veja o exemplo ContentStreaming no DirectX SDK.

Ele usa a abordagem de mapeamento de arquivo. Obviamente, seus usos da API do Windows, mas você pode encontrar a API correspondente para outras plataformas também.

O interessante é que ele mostra a abordagem no contexto. (Leitura in / paginação em partes de um enorme modelo (neste caso terreno) sob demanda

Aumento fornece suporte multiplataforma para arquivos de memória mapeada, entre outras coisas ...

impulsionar a memória arquivos mapeados

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