Pergunta

Estou usando uma biblioteca de manipulação de imagem que lança uma exceção quando tento carregar imagens> 4 GB de tamanho. Ele afirma ser de 64 bits, mas uma biblioteca de 64 bits não permitiria carregar imagens maiores que isso? Eu acho que eles recompensaram suas bibliotecas C usando um modelo/compilador de memória de 64 bits, mas ainda usaram números inteiros não assinados e falharam na atualização para usar tipos de 64 bits.

Isso é uma conclusão razoável?

Editar - Como uma pensamento seguinte a memória do OS pode se tornar tão frágil que a alocação de pedaços grandes não é mais possível? (Também não funciona logo após uma reinicialização, mas apenas me perguntando.) E a UND .NET? A memória gerenciada .NET pode se tornar tão fragmentada que a alocação de pedaços grandes falham?

Foi útil?

Solução

É uma sugestão razoável, no entanto, a causa exata pode ser várias coisas - por exemplo, qual o sistema operacional você está executando, quanta RAM / SWAP você tem? O aplicativo/sistema operacional não pode comprometer demais a memória virtual, portanto, você precisará de 4 GB (ou mais) da RAM gratuita para abrir a imagem.

Por interesse, parece ser uma parada definitiva no limite de 4 GB - ou seja, uma imagem de 3,99 GB é bem -sucedida, mas uma falha de 4 GB - você diz que faz o que sugere um uso definitivo de um tamanho de 32 bits nas estruturas de dados da biblioteca.

Atualizar

Com relação à sua segunda pergunta - na verdade não. Praticamente todos os sistemas operacionais modernos usam a memória virtual; portanto, cada processo obtém seu próprio espaço de endereço contíguo. Uma única região contígua no espaço de endereço de um processo não precisa ser apoiada por RAM física contígua, pode ser composta por várias áreas físicas separadas de RAM feitas para parecer que são contíguas; Portanto, o sistema operacional não precisa ter um único pedaço de 4 GB de RAM gratuitamente para dar ao seu aplicativo um pedaço de 4 GB.

É possível que um aplicativo possa fragmentar seu espaço de endereço virtual, de modo que não haja espaço para uma região contígua de 4 GB, mas considerando o tamanho de um espaço de endereço de 64 bits, provavelmente é altamente improvável em seu cenário.

Outras dicas

Sim, a menos que talvez o formato de arquivo binário limite o tamanho das imagens.

Para responder ao seu acompanhamento, eu li recentemente isto artigo e achei interessante.

E sim, .NET pode ter problemas com Fragmentação da memória.

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